鱼C论坛

 找回密码
 立即注册
查看: 1568|回复: 1

scanf输入控制格式问题

[复制链接]
发表于 2023-3-24 22:25:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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格式以适应可能的空格。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 23:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表