2009-11-29 21 views
5

Trong đoạn code C sau:Liệu scanf() có ' n' làm đầu vào còn lại từ lần quét trước() không?

char name[20]; 
int a; 
int b; 

for(i=0;i<10;i++) 
{ 
    printf("\nEnter name, a & b: "); 
    scanf("%s %d %d",name,&a,&b); 
} 

không scanf đọc trong '\n' lọt vào vị trí cuối scanf() trong lặp 1st, cho đầu vào lặp thứ 2?

+2

Tại sao bạn không thử chạy mã này thông qua trình gỡ lỗi và xem điều gì xảy ra. Sau đó, nếu nó không mong muốn hoặc không rõ ràng đăng một câu hỏi về khía cạnh đó. – ChrisF

Trả lời

5

scanf để luồng đầu vào trỏ đến \n. Trong trường hợp của bạn, nó không tạo ra sự khác biệt: mỗi khi được gọi, scanf sẽ di chuyển dọc theo cho đến khi tìm thấy ký tự không khoảng trắng bên cạnh. Vì vậy, cho nó 10 dòng name, a, b vì đầu vào sẽ hoạt động như bạn mong đợi.

Nhưng xem xét việc này:

scanf("%d", &a); 
fgets(str, 20, stdin); 

fgets đọc cho đến khi nó tìm thấy kí tự xuống dòng đầu tiên, vì vậy str sẽ chỉ nhận được một giá trị của \n, và fgets sẽ không đọc dòng tiếp theo của đầu vào.

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