c语言中scanf函数定义宽度的问题

对于整型
scanf("%4d",&a);
1.如果输入以下内容
12345678
则结果scanf函数只把1234保存到变量a中
2.如果输入以下内容
123
则结果scanf函数会把123原样保存的变量a中

可用如下程序进行说明
#include <stdio.h>
int main()
{
int a;
scanf("%4d",&a);
printf("%d",a);
}

问题:
如果对于实型数据,或者字符型数据,又是什么的结果呢?
请举例说明。

谢谢,刚刚开始学C,呵呵~~多多指教。

这个问题问的好。
你问题的第二种情况是说如果输入多个字符类型数据的情况。
如果是这样,请注意,除非,如果scanf后面的格式是%c的,那么它只能吸收你输入的一个字符,后面的东西全部放在缓存区。也就是说,你再接上一个scanf( "%c", &c),它会继续吸收你前面没有吸收到的字符。
如果下面语句段:
scanf( "%c", ch1 );
scanf( "%c", ch2 );
scanf( "%c", ch3 );
你输入"ab"后按回车。那么,a被ch1吸收,b被ch2吸收,ch3呢?你是不是以为没有东西吸收?其实你输入ab后按了回车,所以回车被ch3吸收了。这点一定要小心。
你的问题第一种情况就明显很多了。
比如你的scanf语句吸收格式字段是%4f,但是你输入了3.1415926那么,它只会吸收3.14,作为浮点类型。后面的15926以整型的方式存在于缓存中。

学C语言一定要不停的去体悟它的输入输出,个人觉得它的重要性仅次于指针。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2009-12-24
scanf("%4d",&a);表示若输入小于或等于四位,则原样输出,若输入大于四位,从左到右截取你输入的字符
scanf("%-4d",&a);表示若输入小于或等于四位,则原样输出,若输入大于四位,从右到坐截取你输入的字符
第2个回答  2009-12-25
附议1L
相似回答