在while(1)循环中等待用户输入

时间:2014-04-01 10:09:29

标签: c while-loop

我试图在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循环。它甚至不等待用户输入(它本应该做的。)

提前感谢您查看此内容!

4 个答案:

答案 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();