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

问题描述 投票:0回答:1

我正在用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'时,循环将继续:

enter image description here

如果输入当前值,它将得到应有的值。

c scanf codeblocks
1个回答
0
投票

解决这种问题的一种方法是输入一个字符串(在函数上添加毒药,然后使用sscanf尝试解析它。


0
投票

如果输入项输入错误,则scanf()不会耗尽输入缓冲区,因此,您必须以其他方式对其进行读取,以确保读取(例如,作为字符串)。

见下文:

int main()
{
    float a = 0;

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

        printf("reenter");
    }

    printf("%f", a);

    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.