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);