使用scanf返回值验证输入类型失败
我想通过使用scanf的返回值检查c代码中的所有输入是否都是double类型:使用scanf返回值验证输入类型失败,c,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: 在这里,我期望2,但我得到1: 据 格式字符串由一系列指令组成,这些指令描述 如何处理输入字符的
#include <stdio.h>
int main()
{
double a,b,c;
int x = scanf("%lf %lf %lf", &a, &b, &c);
printf("%d", x);
}
但我得到的是:
这里我期望1,但我得到0:
在这里,我期望2,但我得到1:
据
格式字符串由一系列指令组成,这些指令描述
如何处理输入字符的序列。如果处理
指令失败,不读取进一步的输入,scanf返回
因此
关于案例1
当检测到第一个说明符不匹配时,scanf将停止读取
对于案例2
当检测到第二个说明符不匹配时,scanf将停止读取。根据
格式字符串由一系列指令组成,这些指令描述
如何处理输入字符的序列。如果处理
指令失败,不读取进一步的输入,scanf返回
因此
关于案例1
当检测到第一个说明符不匹配时,scanf将停止读取
对于案例2
当检测到第二个说明符不匹配时,scanf将停止读取。scanf会在任何转换失败时立即停止处理输入,从左到右,它不会尝试处理剩余的输入
所以当你进去的时候
b b 2.8
2 x 2.1
尝试进行第一次%lf转换时失败。由于未进行任何转换,因此返回0
当你进入
b b 2.8
2 x 2.1
它成功地将2转换为double,但在x上失败,因此它不处理2.1并返回1。scanf在任何转换失败后立即停止处理输入,从左到右,它不会尝试处理其余的输入
所以当你进去的时候
b b 2.8
2 x 2.1
尝试进行第一次%lf转换时失败。由于未进行任何转换,因此返回0
当你进入
b b 2.8
2 x 2.1
它成功地将2转换为双精度,但在x上失败,因此它不会处理2.1并返回1。不要将图像或链接发布到外部站点-输入和输出为纯文本,将其复制到问题中,并解释为什么您希望这些输出在第一次转换失败时失败。您的期望不合理。如果早期匹配失败,scanf将返回零。这就是你第一次跑步时发生的情况。scanf的工作原理与您的预期相反。@EugeneSh:scanf在第一次失败的转换中没有失败。scanf返回指令失败时停止处理。scanf工作正常。不要将图像或链接发布到外部站点-输入和输出是纯文本的,请将其复制到问题中,并解释为什么您希望这些输出在第一次转换失败时失败。您的期望不合理。如果早期匹配失败,scanf将返回零。这就是你第一次跑步时发生的情况。scanf的工作原理与您的预期相反。@EugeneSh:scanf在第一次失败的转换中没有失败。scanf返回指令失败时停止处理。scanf工作正常。