您的位置:首页 > 其它

有关有scanf及printf的一些误区及问题

2012-04-23 19:59 232 查看
今天我一直在调试自己的顺序表一个scanf语句代码如下:

printf("please input  list:");
for(i = 0;i < MAX;i++){//如何解决除用%s以外其他方式来解决输入数组的问题
scanf("%d",&s[i]);
if (s[i]== '\n')
break;
}
printf("please choose: ")


当我输入lzm时,我通过调试才知道我所有输入的数全都是0,这时我无法理解,本来我输入了lzm为什么编译器把他们当作全是0来处理呢?

于是我自己有变了小的程序看看是不是scanf的问题或是printf问题,代码如下:
#include <stdio.h>
main(){
char a;
int c;
printf("please input num:\n");
scanf("%c,%d",&a,&c);
printf("the a and c 's result is:%c\n",a);
printf("%d\n",c);
}


以下时我输入的一些数及产生的结果:

please input num:
a,a
the a and c 's result is:a
0


please input num:
a,1
the a and c 's result is:a
1


通过上面两个结果我似乎得出这么一个结论:

char格式的只能输出字母,而int类型的只能输出阿拉伯数字。

于是我有猜想如果时其他的输入的字符呢?

于是有:

please input num:
(,}
the a and c 's result is:(
0


于是乎产生了下面这个结果

于是我又对照这ascii输入字符,有如下:

please input num:
a,48
the a and c 's result is:a
48


please input num:
48,a
the a and c 's result is:4
0


please input num:
%,^
the a and c 's result is:%
0


从中我得出这么一个结论,在gcc编译器中如果某个数时int类型的那么它只能输出数字0-9,对于其他的字符它将输出0;

对于char类型的输出的除了输入阿拉伯数字外,其他的字符都能打印出来,而对于阿拉伯数字,起输出什么都没有:

于是乎我觉得这它不给力了,为什么int类型不行输出其他字符呢?为什么呢?我无赖,坐在电脑桌前一直想,int类型什么时候只能输出阿拉伯数字了,那么自然时数字干吗在

32位的机器上给每个int类型的字符分配四个字节,这不是浪费空间么?不就是一个数字么,跟其他的字符有什么区别吗?为什么给每个char类型的字符只分配一个字节,这

公平么?

我一直在猜想,,,,希望有解答。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: