我试图在C中进行循环,程序计算2个数字的平均值,然后等待用户输入。如果用户输入是' G'那么循环就会破裂。然而,目前这不起作用,因为它(以一种奇怪的方式)是一个infite循环。
我的代码是:
while(1){
pogingen++;
gem = (minimum+maximum)/2;
printf("%i",gem);
scanf("%c",&invoer);
if(invoer=='L'){
maximum = gem;
}
if(invoer=='H'){
minimum = gem;
}
if(invoer=='G'){
printf("%i",pogingen);
break;
}
}
我用这些值测试了它:minimum = 1,maximum = 10.结果将是5的infite循环。它甚至不等待用户输入(它本应该做的。)
提前感谢您查看此内容!
答案 0 :(得分:2)
在某些情况下它不等待用户输入的原因是因为当scanf
读取一个字符时,在输入结束时按 Enter 键,该键也存储在输入缓冲区中。所以下一次迭代它会读取输入密钥。
通过告诉scanf
丢弃尾随空格(换行符是其中),可以很容易地解决这个问题:
scanf("%c ",&invoer);
/* ^ */
/* | */
/* Notice extra space here */
如果用户没有提供有效输入,您可能还需要打印一些错误消息。另外,请考虑使用toupper
,因为用户将不给您一个大写字母。
使用例如也可能更好而是if ... else if ... else ...
。或者可能使用switch
语句。
答案 1 :(得分:2)
It doesn't even wait for the user input (which it's supposed to do.)
。
程序没有等待输入意味着输入缓冲区中还有一些字符。可能来自先前输入的\n
。在读取输入之前清除输入缓冲区
你可以把,
getchar();
scanf("%c",&invoer);
在圈内scanf()
之前;
答案 2 :(得分:0)
简单而甜蜜的解决方案invoer=getchar();
,它将等待一个字符以及存储到变量中。
无需撰写scanf
答案 3 :(得分:0)
invoer=getchar();
是一个解决方案,如果您在将stdin用于下一次迭代之前将其刷新,如下所示:
fflush(stdin);
invoer=getchar();