Câu hỏi getc Vs getchar Vs Scanf để đọc một ký tự từ stdin


Trong ba hàm dưới đây:

getc getchar & scanf

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

Có bất kỳ nhược điểm hay 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 làm cho một chức năng tốt hơn các chức năng khác không?


23
2018-03-24 11:05


gốc




Các câu trả lời:


Nếu bạn chỉ muốn đọc một ký tự đơn từ stdin, thì getchar() là sự lựa chọn thích hợp. Nếu bạn 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 (nói, một luồng được mở bằng fopen());
  • scanf() cho phép bạn đọc nhiều hơn chỉ một ký tự đơn tại một thời điểm.

Lỗi phổ biến nhất khi sử dụng getchar() là thử và sử dụng char biến để lưu trữ kết quả. Bạn cần sử dụng int biến, vì phạm vi giá trị getchar() trả về là "một giá trị trong phạm vi unsigned char, cộng với giá trị âm duy nhất EOF"A char biến 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. Ứng dụng tương tự getc().


25
2018-03-24 11:13



Cảm ơn vi đa 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
Có, nhưng nó là quá mức cần thiết cho mục đích đó. - caf
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
Thưa ngài, tôi có vài điều để hỏi bạn, chúng ta có thể trò chuyện không? - Suraj Jain


từ Hướng dẫn lập trình C của Beej

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

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

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

Vâng, tôi đã lừa dối và sử dụng cut-n-paste để làm điều đó đoạn cuối.

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


5
2018-06-02 09:57