2014-02-25 74 views
1

计划:循环问题,而循环执行额外的迭代

#include <stdio.h> 
int main() { 
    char t; 
    while(1) { 
     t='\0'; 
     printf("\nExit?(y/n): "); 
     scanf("%c", &t); 
     if(t=='y' || t=='Y') { 
      return 0; 
     } 
     else 
     printf("\nContinuing..."); 
    } 
    return 0; 
} 

输出:

$ vim Return.c 
$ gcc -o Return Return.c 
$ ./Return 

Exit?(y/n): n 

Continuing... 
Exit?(y/n): 
Continuing... 
Exit?(y/n): n 

Continuing... 
Exit?(y/n): 
Continuing... 
Exit?(y/n): y 
$ 

'n'作为输入之后,

Continuing... 
Exit?(y/n): 

循环一个更多时间,无需用户输入。如果代码有任何错误,请告知我

+0

后,你已经忘记了换行符'y' ... –

回答

2

您需要确保scanf丢弃换行符。尝试像这样:

scanf(" %c", &t); 
+0

只是好奇,想知道它是如何将新的生产线作为输入,因为“%C”只需要一个字符作为输入正确的? – DragonX

+0

@DragonX: - scanf(“%c”,&c1)和scanf(“%c”,&c2)之间的区别在于没有空格的格式读取下一个字符,即使它是空格,空白跳过空白(包括换行符)并读取下一个不是空白的字符。 “Enter”按键向标准输入发送'\ n',这是您的第二次scanf呼叫扫描的内容。 –

+1

我明白了,谢谢 – DragonX

2

尝试在scanf语句的格式标识符中给出空格。尝试类似

scanf(" %c",&t); 
+0

对于scanf中的输入错误感到抱歉。 – user3152555