c编程scanf不会读取输入两次

c programming scanf will not read input twice

我正在用 C 语言的 CodeBlocks 编写程序。我想检查输入的类型是否正确,如果不正确,请尝试再次获取它。

我的问题是每当我尝试使用 scanf 获取输入并且输入不正确时,它不会再次输入 scanf 并且只是继续循环,就好像输入总是不正确一样。

#include <stdio.h>
#include <stdlib.h> 

int main()
{
    float a = 0;

    while(scanf(" %f", & a) == 0)
    {
        printf("reenter");
    }

    printf("%f", a);

    return 0;
}

当我尝试输入不正确的值 'y' 时,循环将继续:

如果我输入一个当前值,它会按原样得到它。

处理这种事情的一种方法是接收一个字符串(在函数上挑你的毒),然后使用 sscanf 尝试解析它。

如果输入条目错误,输入缓冲区不会被 scanf() 消耗,因此您必须以保证成功读取的方式额外读取它 - 例如作为字符串。

见下文:

int main()
{
    float a = 0;

    while (scanf(" %f", & a) == 0)
    {
        scanf("%*s"); // additional "blind" read

        printf("reenter");
    }

    printf("%f", a);

    return 0;
}

您需要清理输入。试试这个

#include <stdio.h>
#include <stdlib.h> 

int main()
{
    float a = 0;

    while(scanf("%f", &a) == 0) {
        printf("reenter\n");
        while((getchar()) != '\n'); 
    }

    printf("%f", a);

    return 0;
}