2014-10-03 59 views
0

我正在创建一个程序来生成下一个素数,为此我需要用户input.I使用do-while循环,但它不停止输入第二次。请指导我在哪里做错了。谢谢! 这是我的代码片段从用户使用做输入while循环在c

int 
main() 
{ 
int val=1; 
char input; 
do 
{ 
    val=nextprime(val); 
    printf("\n%d\t",val); 

    printf("Next Prime number? Y or N "); 
    scanf("%c",&input); 
} 
while(input != 'N' && input != 'n'); 
return 0; 

}

输出我得到的是:

2 Next Prime number? Y or N y 

3 Next Prime number? Y or N 
5 Next Prime number? Y or N y 

7 Next Prime number? Y or N 
11 Next Prime number? Y or N y 

13 Next Prime number? Y or N 
17 Next Prime number? Y or N y 

19 Next Prime number? Y or N 
23 Next Prime number? Y or N y 

29 Next Prime number? Y or N 
31 Next Prime number? Y or N n 
+2

尝试'“%c”'为您的格式字符串。看到[**这个问题**]的第二个答案(http://stackoverflow.com/questions/3744776/simple-c-scanf-does-not-work)。这里有很多重复的东西;那是我碰到的第一个。 – WhozCraig 2014-10-03 07:51:48

回答

0

你这里有答案:Reading a single character in C

当你按下“Y”按Enter键,它立在输入缓冲区,并阅读你的循环的下一次迭代。

您需要使用:

scanf(" %c",&input); 

与领先的空间忽略输入缓冲区最后caracters。

+0

谢谢..这真的很有帮助。 – bhavi 2014-10-05 05:52:04

1

的标准输入将包含y\n(Y,然后按回车键)。由于您的代码将Nn以外的任何字符视为yes,因此如果您输入y后跟回车符,则会计算2个新的素数。

要读取一个字符时,跳过空白,把空间的扫描代码之前:

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

谢谢..现在工作.. – bhavi 2014-10-05 05:52:22

1

scanf%c前添加一个空格将解决这一问题。

这是因为scanf做你输入第一个字符后不消耗字符\n并让它在stdin。作为回车键(\n)也是一个字符,它就会被下一个scanf呼叫消耗,从而,您的循环会再次执行一次.之前的空格将丢弃空格等所有空格。

解决这个问题的另一种方法是在scanf之后加getchar();来吃掉\n但我更喜欢第一个。

+1

我也更喜欢第一个,因为如果用户一次输入多个字符,它会有更一致的行为。 – 2014-10-03 08:06:03

+0

谢谢..工作! – bhavi 2014-10-05 05:52:50