大胆智多星 发表于 2023-3-24 22:25:34

scanf输入控制格式问题

#include <stdio.h>
#include <String.h>


int main()
{
        int a,b,c;
        scanf("%d,%d,%d",&a,&b,&c);
        printf("%d,%d,%d",a,b,c);
}
大佬们我想问假如我输入数字时不按照,的分隔格式来键入是怎么读入的,
我在我的电脑试了一下输入:22,   33,44
输出的结果是:22,1,0
我想知道为什么我在第一个逗号后加入了空格他就不会正常的读取了,我想知道他是怎么读取后面的1跟0分别给b,c的

isdkz 发表于 2023-3-24 22:31:56

首先,你的代码有一个小问题。在C语言中,字符串操作的库应该是<string.h>而不是<String.h>。以下是修复后的代码:

#include <stdio.h>
#include <string.h>

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

现在,关于你的问题。当你在输入中使用逗号加空格(例如"22, 33,44")时,scanf的格式不符合这种情况。

你的scanf格式为"%d,%d,%d",它期望3个整数用逗号分隔。当输入不符合此格式时,scanf会停止读取,并将已成功读取的值赋给变量。

在你的例子中,首先读取了22,然后遇到了一个空格。由于空格与格式不匹配,scanf停止读取。

此时,只有变量a被正确赋值,而b和c保留它们的初始值(在这种情况下可能是未定义的)。

在你的例子中,b和c恰好为1和0,但这可能因编译器或平台而异。

要解决此问题,你可以更改scanf格式以适应可能的空格。
页: [1]
查看完整版本: scanf输入控制格式问题