为什么当我运行这段代码时:
#include <stdio.h>
int main () {
int a, b;
if (scanf("%d %d", &a, &b) == 2)
printf("%d %d", a, b);
else
printf("Something went wrong");
return 0;
}
输入例如:1 1.5 输出为:1 1
为什么 scanf 会读取“.”之前的两个数字并忽略“.5”?如何检查最后一个数字不是浮点数并且字符串结束?
操作系统:MacOS/Linux 编译器:gcc
*我只想运行上面的代码
输入:1 1.5234(一些浮点数)
输出:“出了点问题”
fgets:读取整行输入,确保捕获用户输入的所有内容,直到他们按 Enter。这避免了 scanf 在第一个不匹配字符处停止的限制。
sscanf:解析input中存储的输入。它尝试读取两个整数 (%d %d)。之后,它尝试再读取一个字符 (%c),该字符应该是空格(如空格或换行符)。
验证:
sscanf(input, "%d %d %c", &a, &b, &leftover) == 2:检查是否成功读取了两个整数。 isspace(leftover):检查第二个整数后面的字符是否为空格(确保没有其他字符,例如小数点)。 输出:如果输入格式匹配(scanf 成功读取两个整数后跟空格),则打印整数。否则,它会打印一条错误消息