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

今天我一直在调试自己的顺序表一个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类型的字符只分配一个字节,这

公平么?

我一直在猜想,,,,希望有解答。。。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值