2011-11-28 43 views
9
#include <stdio.h> 

int main() 
{ 
    char loop='y'; 
    while(loop != 'n') { 
     printf("loop? "); 
     scanf("%c", &loop); 
     if(loop != 'y') { 
      loop='n'; 
     } 
    } 
    return 0; 
} 

Nếu tôi nhập 'y', hãy khởi động lại vòng lặp while nhưng bỏ qua lần quét thứ hai và kết thúc vòng lặp sau đó. Có ai giúp được không?Khi vòng lặp bỏ qua quét lần thứ hai

+0

Xem bài viết này: http://www.gidnetwork.com/b-60.html –

+2

bản sao có thể có của [Quét thứ hai không hoạt động] (http://stackoverflow.com/questions/4023643/second-scanf -nếu không hoạt động) – AShelly

+2

bản sao có thể có của [Scanf bỏ qua mọi vòng lặp khác trong C] (http://stackoverflow.com/questions/1669821/scanf-skips-every-other-while-loop-in-c) –

Trả lời

15

Đảm bảo rằng scanf hủy dòng mới. Thay đổi nó thành:

scanf(" %c", &loop); 
    ^
+0

thx, nó hoạt động. Nhưng tại sao tôi phải đặt một khoảng trống trước% c? – user1069968

+2

@ user1069968 Không gian đó làm cho 'scanf' bỏ qua tất cả khoảng trống (bao gồm cả dòng mới). – cnicutar

9

Bạn có thể phải nhập dòng mới để đầu vào đi vào chương trình của bạn, phải không? Lần thứ hai vòng lặp của bạn thực hiện nó đọc ký tự dòng mới, được "chờ" để được đọc và tự động thoát khỏi vòng lặp ('\n' != 'y'). Bạn có thể làm cho scanf bỏ qua khoảng trắng bằng cách sử dụng chuỗi định dạng này để thay thế:

" %c" 
+0

Đây là câu trả lời được giải thích tốt nhất về chủ đề này. Cảm ơn bạn đã tiết kiệm bài tập về nhà bạn gái của tôi! <3 –

+1

Cảm ơn @AustinWitherow, tôi rất vui khi biết nó hữu ích cho bạn :) – sidyll

-1

Một giải pháp có thể là sử dụng fflush(stdin) sau khi tuyên bố scanf() để xóa bộ đệm đầu vào.

+1

'fflush (stdin)' có hành vi không xác định trong lập trình C. Nó có thể làm việc như dự định trên một số hệ thống, nhưng nó không phải là thực hành tốt nói chung. –

+0

@ NisseEngström Cảm ơn Nisse, tôi đồng ý với quan điểm của bạn. Nó không phải là một thực hành tốt như chúng ta có thể thấy ở đây https://stackoverflow.com/questions/9122550/fflushstdin-function-does-not-work –

+0

fflush stdin cũng làm việc trên linux nhưng tránh sử dụng nó UB của nó, bằng cách sử dụng nó bạn bị mất tính di động. – EsmaeelE

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