如何正确验证scanf中读取的输入数量

时间:2017-10-18 14:45:35

标签: c scanf

如何正确查看我的scanf函数中读取了多少输入?当我运行以下代码时它不显示结果,这是因为我没有从scanf读取的2个输入或其他一些原因 这是我的代码:

#include <stdio.h> 

int main()
{
float numberOne;
float numberTwo;

scanf("%f %f", &numberOne, &numberTwo);
float result = numberOne + numberTwo;

int howManyRead = scanf("%f %f", &numberOne, &numberTwo);

if ( howManyRead == 2)
{
    printf("%f", &result);
}   
else
{
    printf("invalid input");
}
sleep(10);

}

2 个答案:

答案 0 :(得分:1)

您的代码中有两次scanf来电。忽略第一个调用的结果,同时检查第二个调用的结果。

当您输入两个数字时,第一个scanf将返回2,代码会忽略该数字。之后,对第二个scanf的调用会尝试读取另外两个数字。

您可以通过删除对scanf的第一次调用来解决此问题:

float numberOne, numberTwo;
if ( scanf("%f %f", &numberOne, &numberTwo) == 2) {
    float result = numberOne + numberTwo;
    printf("%f", result);
} else {
    printf("invalid input");
}

答案 1 :(得分:-1)

您未按预期方式使用scanf()的返回值。它可以识别扫描的成功/失败,并根据它做出决定。

您需要做三件事。

  • 删除两行

    scanf("%f %f", &numberOne, &numberTwo); 
    float result = numberOne + numberTwo;
    

    这是因为,如果您尝试使用目标变量而未进行检查,则scanf()失败时,值可能不确定。此外,还有重复的scanf(),这些都是错误的,不需要。

  • 在条件块float result = numberOne + numberTwo;中添加第if ( howManyRead == 2)行。

  • &来电中删除printfprintf("%f", result);