2 qq 29541945 qq_29541945 于 2016.02.15 07:40 提问

C语言scanf返回值的问题

其调用格式为: scanf("<格式化字符串>",<地址表>);
scanf()函数返回成功赋值的数据项数,出错时则返回EOF。

为了测试这一点我写了两段代码,第一段是
a=scanf("%d",&b);
printf("%d",a);这样写输入1.2,2.3,2,3,4
都会打印1.
但是
while(scanf("%d",&b)==1);输入1.2就会终止循环,2,3,4,都会正常循环并让我继续输入。这说明输入1.2是返回0的。
为什么?并没有发现两种形式的不同之处,还是说在赋值的时候scanf自带强制类型转换所以无所谓?

2个回答

caozhy
caozhy   Ds   Rxr 2016.02.15 09:23
已采纳
 #include <stdio.h>

int main(int argc, char* argv[])
{
    int b;
    char c;
    scanf("%d", &b);
    scanf("%c", &c);
    printf("%d %c", b, c);
    return 0;
}

输入1.2其实%d只捕获到了1,后面那个.没有捕获。下次再捕获%d的时候就是0了,所以循环不能继续。
看上面那个程序,看得很清楚。

91program
91program 回复caozhy: 孙子曹,难道你想把别人的回答全部请管理员删除!你的脸可真是“大”啊,不过还好你说了”请”字,要不你就是管理员了。
接近 2 年之前 回复
qq_29541945
qq_29541945 感谢!
接近 2 年之前 回复
91program
91program   Ds   Rxr 2016.02.15 08:53

在 while 语句中加上 a = scanf… 试试看是不是你怀疑的问题

91program
91program 回复caozhy: 用下载资源骗取“采纳”的,你干的还少嘛?孙子曹!
接近 2 年之前 回复
91program
91program 回复caozhy: 你不也一样,有什么资格在这里评论他人的!你的回答都对,为什么那么多的回答没有被采纳。孙子!
接近 2 年之前 回复
caozhy
caozhy 回复91program: 明知回答不正确还灌水,这就是你的不对了。
接近 2 年之前 回复
91program
91program 回复caozhy: 孙子曹,你又来找骂!爷爷说过你跟我的回复一下、爷爷就骂一次。这是我对你的“承诺”!无论我的回答正确与否,也无论你的跟的正确与否。
接近 2 年之前 回复
91program
91program 回复caozhy: 孙子,你爷爷我给的回答以你“大牛”的气质判断又不好了?可是你爷爷我觉得很好!只可惜你不是管理员了!
接近 2 年之前 回复
caozhy
caozhy 请管理员删除胡乱灌水的答案
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片