2010-03-24 74 views
23

Trong số dưới ba chức năng:getc Vs getchar Vs scanf để đọc một nhân vật từ stdin

getc getchar & scanf

đó là tốt nhất cho đọc một nhân vật từ stdin và tại sao?

Có bất kỳ nhược điểm hoặc hạn chế nào được biết đến đối với bất kỳ chức năng nào trong số này hoạt động tốt hơn các chức năng khác không?

Trả lời

25

Nếu bạn chỉ muốn đọc một ký tự đơn từ stdin, thì getchar() là lựa chọn thích hợp. Nếu bạn có các yêu cầu phức tạp hơn, thì getchar() sẽ không đủ.

  • getc() cho phép bạn đọc từ một luồng khác (ví dụ, mở bằng fopen());
  • scanf() cho phép bạn đọc nhiều hơn chỉ một ký tự một lần.

Lỗi phổ biến nhất khi sử dụng getchar() là thử và sử dụng biến số char để lưu kết quả. Bạn cần sử dụng biến số int vì phạm vi giá trị getchar() trả về là "giá trị trong phạm vi unsigned char, cộng với giá trị âm duy nhất EOF". Biến số char không có đủ phạm vi cho điều này, điều này có nghĩa là bạn có thể nhầm lẫn một ký tự hoàn toàn hợp lệ với EOF. Điều tương tự cũng áp dụng cho getc().

+1

Cảm ơn bạn đã trả lời. Trong scanf nếu tôi chỉ cho% c, thì tôi có thể đọc chỉ một ký tự đúng không? – Jay

+0

Có, nhưng nó là quá mức cần thiết cho mục đích đó. – caf

+2

Nghiêm túc quá mức. Trên nhiều nền tảng, getchar() là một macro trả về nhanh một ký tự (với luồng đệm) hoặc sử dụng fread() để lấy một ký tự. Với scanf(), có rất nhiều công việc không cần thiết. – tomlogic

5

from Beej's Guide to C Programming

Tất cả các chức năng này bằng cách này hay cách khác, đọc một ký tự đơn từ bàn điều khiển hoặc từ một tập tin. Sự khác biệt là khá nhỏ và dưới đây là mô tả:

getc() trả về một ký tự từ FILE được chỉ định. Từ quan điểm sử dụng , nó tương đương với cùng một lệnh gọi fgetc() và fgetc() là một số ít phổ biến hơn để xem. Chỉ việc thực hiện hai hàm khác nhau.

fgetc() trả về một ký tự từ FILE được chỉ định. Từ quan điểm sử dụng , nó tương đương với cùng một cuộc gọi getc(), ngoại trừ rằng fgetc() phổ biến hơn một chút để xem. Chỉ việc thực hiện hai chức năng mới khác nhau.

Có, tôi đã lừa và sử dụng cut-n-paste để thực hiện đoạn cuối.

getchar() trả về một ký tự từ stdin. Trong thực tế, nó giống như gọi getc (stdin).

Các vấn đề liên quan