C语言问题,向大神求助,为什么数字输入后变了

我是一名C语言初学者,我现在遇到一个题目就是:输入10个数字,并且排序好后输出,但是我感觉我接下来的代码是对的啊,为什么输入的数字超过256就会一循环,难道是int的限制?求助,并且求好友。
#include<stdio.h>
int main()
{
char a[100];
long i,j,t,b;
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
for(j=0;j<=9;j++)
for(t=0;t<=8;t++)
if(a[t]>a[t+1])
{
b=a[t];
a[t]=a[t+1];
a[t+1]=b;
}

for(i=0;i<=9;i++)
printf("%d\n",a[i]);
return 0;
}

你的数组a[100]定义为了char型,而char型只有8位,数值只能从-128到127。char型确实可以当作整数来用,我们单片机编程都经常这样用,单片机内存较小,我们要根据变量的需求,定义好长度,用什么类型最好是自己算过的。char是有符号8位长度的数据类型2的8次方为256,既然是有符号,最高位就作为符号位为0则是正数,为1则是负数,所以范围是从-128到127。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-10
如果是char, 最大整数是-128~127,所以256早就溢出了。
第2个回答  推荐于2016-07-27

代码如下

#include<stdio.h>
void main(){
 int a[10],x;
 int i,j;
 printf("输入需要排序的十个数,空格隔开\n");
 for(i=0;i<10;i++)
 {
  scanf("%d",&a[i]);
 }

 for(i=0;i<10-1;i++)
 {
  for(j=0;j<10-1-i;j++)
  {
   if(a[j]>a[j+1])
   {
    x=a[j];
    a[j]=a[j+1];
    a[j+1]=x;
   }
  }
 }
 
 printf("排序后:\n");
 for(i=0;i<10;i++)
 {
  printf("%d  ",a[i]);
 }
 printf("\n");


 }

本回答被提问者采纳
第3个回答  2014-11-10
char a[100];换成int a[100];追问

整数就必须用int?char不可以替代么

追答

也不是,一般情况下整数用int,你用char也可以 ,但是char只能表示0 - 255 或者-128 - 127。

相似回答