Tôi có chương trình sau:
int main(int argc, char *argv[])
{
int a, b;
char c1, c2;
printf("Enter something: ");
scanf("%d",&a); // line 1
printf("Enter other something: ");
scanf("%d", &b); // line 2
printf("Enter a char: ");
scanf("%c",&c1); // line 3
printf("Enter another char: ");
scanf("%c", &c2); // line 4
printf("Done"); // line 5
system("PAUSE");
return 0;
}
Khi tôi đọc trong cuốn sách C, tác giả nói rằng scanf()
đã để lại một ký tự dòng mới trong bộ đệm, do đó, chương trình không dừng lại ở dòng 4 để người dùng nhập dữ liệu, mà nó lưu trữ ký tự dòng mới trong c2 và chuyển đến dòng 5.
Có đúng không?
Tuy nhiên, điều này chỉ xảy ra với char
các kiểu dữ liệu? Vì tôi không thấy vấn đề này với int
các kiểu dữ liệu như trong dòng 1, 2, 3. Có đúng không?
fflush(stdin)
có thể được sử dụng trước lệnh gọi tớiscanf()
một ký tự. Vui lòng đọc Sử dụngfflush(stdin)
để thảo luận về ưu và nhược điểm và các lựa chọn thay thế cho phương pháp đó (phương pháp này hoạt động, ít nhiều, trên Windows và không hoạt động ở hầu hết các nơi khác).