c语言scanf的两个问题

来源:百度知道 编辑:UC知道 时间:2024/05/04 19:54:41
请看一个程序
main()
{
int a,b,c,d,e;
scanf("%d%c%c%c%d",&a,&b,&c,&d,&e);
printf("a=%d,b=%c,c=%c,d=%c,e=%d",a,b,c,d,e);
}
输入:
123abc789<回车>
运行结果:
a=123,b=a,c=b,d=c,e=789 请问为什么是这样的?

如果输入123<回车>abc789<回车>,结果为a=123,b=,c=a,d=b,e=3129 请问e是怎么求出来的?
为什么C789按整形输出是3129

对于;123abc789<回车>
是因为你的输入控制格式,两边是%d,即整数,中间三个是字符。
因此输入的时间是将123赋值给了a,abc分别赋值给bcd,789赋值给d

对于:123<回车>abc789<回车>,
首先必须知道,利用scanf输入的时间,回车是作为有效的字符输入的
这样其实是a = 123, b = 回车(也是空), c = a, d = b, e最后不一定是3129,应该是一个随机值(因为将c789按照整数赋值不知道结果是什么)

scanf("%d%c%c%c%d",&a,&b,&c,&d,&e)中%d表明a是用存放整形数据的,注意这里%d没有限定应该存放多少位整形,故在输入字符a出现前所有数字都应存放在a里面。当有字符输入时自动切换存到b中,因为%c格式表明b是用来存放字符的,后面同理可证。
至于如果输入123<回车>abc789<回车>,结果为a=123,b=,c=a,d=b,e=3129 ,那是因为在用%c格式输入字符时,空格字符和“转义字符”都作为有效字符输入,而且一个%c只能输入或输出一个字符,故有a=123,b=,c=a,d=b。至于e=3129 ,那是因为地址&e存放的是c789,当用%d格式输出时就转换成整形3129。在输入数据(注意是在%d格式下)后输入<回车>键表示该数据输入结束。不知道阁下认为对不?