C语言,scanf()函数

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

为什么当我运行这段代码时:

#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(一些浮点数)

输出:“出了点问题”

c gcc syntax scanf stdio
1个回答
0
投票

fgets:读取整行输入,确保捕获用户输入的所有内容,直到他们按 Enter。这避免了 scanf 在第一个不匹配字符处停止的限制。

sscanf:解析input中存储的输入。它尝试读取两个整数 (%d %d)。之后,它尝试再读取一个字符 (%c),该字符应该是空格(如空格或换行符)。

验证:

sscanf(input, "%d %d %c", &a, &b, &leftover) == 2:检查是否成功读取了两个整数。 isspace(leftover):检查第二个整数后面的字符是否为空格(确保没有其他字符,例如小数点)。 输出:如果输入格式匹配(scanf 成功读取两个整数后跟空格),则打印整数。否则,它会打印一条错误消息

© www.soinside.com 2019 - 2024. All rights reserved.