Tôi có chương trình sau:
int main(int argc, char *argv[])
{
char ch1, ch2;
printf("Input the first character:"); // Line 1
scanf("%c", &ch1);
printf("Input the second character:"); // Line 2
ch2 = getchar();
printf("ch1=%c, ASCII code = %d\n", ch1, ch1);
printf("ch2=%c, ASCII code = %d\n", ch2, ch2);
system("PAUSE");
return 0;
}
Như tác giả của đoạn mã trên đã giải thích: Chương trình sẽ không hoạt động bình thường vì tại Dòng 1, khi người dùng nhấn Enter, nó sẽ để lại trong bộ đệm nhập 2 ký tự: Enter key (ASCII code 13)và \n (ASCII code 10). Do đó, tại Dòng 2, nó sẽ đọc \nvà sẽ không đợi người dùng nhập một ký tự.
OK, tôi hiểu rồi. Nhưng câu hỏi đầu tiên của tôi là: Tại sao getchar()( ch2 = getchar();) thứ hai không đọc ký tự Enter key (13)chứ không phải \n?
Tiếp theo, tác giả đề xuất 2 cách để giải quyết các thăm dò đó:
sử dụng
fflush()viết một hàm như thế này:
void clear (void) { while ( getchar() != '\n' ); }
Mã này thực sự hoạt động. Nhưng tôi không thể tự giải thích nó hoạt động như thế nào? Bởi vì trong câu lệnh while, chúng ta sử dụng getchar() != '\n', nghĩa là đọc bất kỳ ký tự đơn lẻ nào ngoại trừ '\n'? nếu vậy, trong bộ đệm đầu vào vẫn còn '\n'ký tự?