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()
.
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
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