使用scanf返回值验证输入类型失败

时间:2019-04-17 17:20:40

标签: c

我想通过使用scanf的返回值来检查c中此代码中所有输入是否均为double类型:


#include <stdio.h>

int main()
{
    double a,b,c;
    int x = scanf("%lf %lf %lf", &a, &b, &c);
    printf("%d", x);
}

但这就是我得到的:

  • 我希望这里是1但我会得到0:
    enter image description here
  • 在这里我期望2,但我会得到1: enter image description here

2 个答案:

答案 0 :(得分:2)

根据scanf man

  

格式字符串由一系列指令组成,这些指令描述   如何处理输入字符的顺序。如果处理一个   指令失败,不再读取任何输入,并且scanf()返回


因此

对于案例1。

scanf在检测到第一个说明符不匹配时将停止读取。

对于案例2。

scanf在检测到第二个说明符不匹配时将停止读取。

答案 1 :(得分:2)

scanf一旦任何转换失败就停止处理输入,从左到右,它不会尝试处理剩余的输入。

因此,当您输入

b b 2.8

尝试进行第一个%lf转换时失败。由于尚未完成任何转换,因此它将返回0

输入时

2 x 2.1

它成功地将2转换为double,但在x上失败,因此它不处理2.1并返回1