当前位置:编程学习 > C/C++ >>

C语言int输出数问题

这是程序源代码,里面的学号是11位,但输出的程序就不是11为了。

 

 

输出后的位数

这是什么原因呢?怎么修改?

追问:我修改了半天还是搞不定,给你看下源代码,该怎么改
  void add2()
   {int c[5];int i,t,j,m,w,e,v;
    int a[5]={10604222014,1060422223,1060422236,1060422251,1060422265};
    char n[5][18]={"小明","小敏","小华","小丽","小梅"};
    int b[5][4]={{65,70,90,65},
                 {78,84,60,70},
                 {50,69,78,80},
                 {70,67,89,75},
                 {68,79,84,90}};
    clrscr();
    for(i=0;i<5;i++)
    { c[i]=0;
      for(j=0;j<4;j++)
      c[i]=c[i]+b[i][j];}
      for(i=0;i<4;i++)
      { for(j=i+1;j<5;j++)
        if(c[i]<c[j])
        {t=c[i];c[i]=c[j];c[j]=t;
         t=a[i];a[i]=a[j];a[j]=t;
        for(e=0;e<18;e++)
        {t=n[i][e];n[i][e]=n[j][e];n[j][e]=t;}
        for(w=0;w<4;w++)
        {t=b[i][w];b[i][w]=b[j][w];b[j][w]=t;}} }
    for(v=0;v<5;v++)
    printf("\n");
    printf("                              # 成绩表 #                              \n");
    printf("\n");
    printf("    ┌───┬───┬───┬───┬───┬───┬───┬───┐\n");
    printf("    │ 学号 │ 姓名 │ 数学 │ 英语 │计算机│ 哲学 │ 总分 │ 名次 │\n");
    for(i=0;i<5;i++)
    { printf("    ├───┼───┼───┼───┼───┼───┼───┼───┤\n");
      printf("    │%6d│",a[i]);
      for(m=0;m<18;m++)
      printf("%c",n[i][m]);
      printf("\b\b\b\b\b\b\b\b\b\b\b\b");
      for(t=0;t<4;t++)
      printf("│%5d ",b[i][t]);
      printf("│%5d │%5d │\n",c[i],i+1); }
      printf("    └───┴───┴───┴───┴───┴───┴───┴───┘\n");
      getch();
   }

答案:编写程序时,你首先要考虑用什么样的数据类型,存储对应的数据。
可以改一下数据类型:
int i;
char  a[5][12]={'10604222014','10604222203','10604222236','10604222251','10604222265'};
char *s=a;
for(i=0;i<5;i++)
printf("%s",s++);
在c语言中,通常用字符数组来存储学号不定长的数据,而不能使用int /long 数据类型,因为首先超出了该数据类型表示范围,同时int /long在设计时就不是为了表示不定长的字符串,通常是用于计算的;在数据库中,比如oracle,mysql等,学号可以是数值类型的, 也可以是字符串类型的,是因为他们实现类似java.Util.BigDecimal算法,它支持更长的数值类型,c语言也可以做到,需要实现对应的算法。
当然不行啦,你这几位数啊,都百亿了,就算32位编译器下unsigned long类型也只到四十亿。
一般用字符串,给你举个例子:

#include<stdio.h>
int main(){
    int i;
    char a[2][12]={"10604222014","1060422223"};
    for(i=0;i<2;i++){
        printf("%s\n",a[i]);
    }
    return 0;
}

你应该学过负数的表达方式吧,就是最高位为1.

你的int 型范围太小,所以系统认为你最高位是负数的标志.

你要加个 long 最好是 unsigned long.

意思是加大定义一个数的范围,你就可以用更大的数了. 

int类型的数据保存不了那么大的数据,把它变成字符串类型好点. 

上一个:帮解决一个c语言题目
下一个:么是C語言啊?

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,