scanf赢得';不要第二次要求输入

scanf赢得';不要第二次要求输入,c,scanf,C,Scanf,跳过了第二个输入。为什么?这就是为什么scanf通常不适合字符输入的原因。在上一次输入之后,有一个剩余的回车符 例如,如果您要在订单输入之后添加一个getchar(),您的问题将得到解决,但这不是干净的代码。您还可以通过替换cont!='y'至继续!='\n' 相反,对所有输入使用getchar(),并在scanf(“%d”,&order)之后检查\n使用该数字(本例中为45),之后仍有一个换行符。您可以使用scanf(“%d\n”,&order)使其使用退货 另一个答案可以在这里找到: 对于大

跳过了第二个输入。为什么?

这就是为什么
scanf
通常不适合字符输入的原因。在上一次输入之后,有一个剩余的回车符

例如,如果您要在订单输入之后添加一个
getchar()
,您的问题将得到解决,但这不是干净的代码。您还可以通过替换
cont!='y'
继续!='\n'

相反,对所有输入使用
getchar()
,并在
scanf(“%d”,&order)之后检查\n

使用该数字(本例中为45),之后仍有一个换行符。您可以使用
scanf(“%d\n”,&order)
使其使用退货

另一个答案可以在这里找到:


对于大多数转换,scanf将跳过空白,但对于字符格式(“%c”),必须使用格式(“%c”)中的显式空格来跳过空白,如下所述:

文档中也解释了这一点,但这很容易混淆,最好使用其他人提到的东西。

您可以使用fflush()


因为stdin中已经有换行符,所以这种情况正在发生。 使用

而不是

scanf(" %c", &cont); 

请注意%c前面的一个空格。

好的,我稍后再试一次。但是我尝试了fgets(…),它也受到了影响,而且应该更安全。fgets在末尾也包括了新行。在输入值之前,只需将换行符替换为null。这已经讨论了无数次了。试着对现有的问题做一些研究
Should we continue (y or n): y
Enter order number: 45
you have entered 45
okay now continue with cont
enter cont y or n: 
not equal to y
printf("enter cont y or n: ");
fflush(stdin);
scanf("%c", &cont);
scanf(" %c", &cont); 
scanf("%c", &cont);