C中的无限循环不会停止扫描

时间:2014-07-05 13:20:32

标签: c loops scanf

我开始学习C并且我仍然处于简单的程序但是有很多错误:/ 一旦它捕获了错误的输入(在else语句中),下面的代码将继续运行,并且它不会停止进行下一次扫描...为什么会发生这种情况?

const float inch_to_cm = 2.54;

int main()
{
    bool run = true;
    float usr_input;
    while(run){
        printf("Please enter the inches: ");
        if (scanf("%f", &usr_input) == 1){
            printf("Result: %4.2f \n", inch_to_cm*usr_input);
            run = false;
        }
        else{
            printf("I asked for a number!\n");
        }
    }

    return 0;
}

1 个答案:

答案 0 :(得分:4)

如果您输入的数字不是数值,那么scanf将无法读取它并在那里生活无限时间导致无限循环。您必须刷新输入缓冲区。将其放在else声明之后:

int c;
while((c = getchar()) != '\n' && c != EOF);