| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 814 人关注过本帖
标题:一道简单的C语言题目,求指教,找错误。。
只看楼主 加入收藏
银音追梦
Rank: 1
等 级:新手上路
帖 子:5
专家分:1
注 册:2012-3-23
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:11 
一道简单的C语言题目,求指教,找错误。。
总是能判断对它是几位数,但分别输出数字的时候就出现0000。。然后倒序也是0000。。


#include <stdio.h>
main()
{ long int n;
int i[4],t;
               
printf("请输入一个整数,不大于99999:");
scanf("%ld",&n);
if (n>99999) t=6;
else if (n>9999) t=5;
else if(n>999) t=4;
else if(n>99) t=3;
else if(n>9) t=2;
else t=1;
printf("这个数的位数为%d\n", t);
i[4]=n/10000;
i[3]=n/1000%10;
i[2]=n/100%10;
i[1]=n%100/10;
i[0]=n%10;
switch(t)
{   case 6: printf("输入不符合要求!");
          break;
    case 5: printf("每一位数分别为%d,%d,%d,%d,%d\n",i[4],i[3],i[2],i[1],i[0]);
          printf("反序数字为%d%d%d%d%d\n",i[0],i[1],i[2],i[3],i[4]);
          break;
    case 4:printf("每一位数分别为%d,%d,%d,%d\n",i[3],i[2],i[1],i[0]);
          printf("反序数字为%d%d%d%d\n",i[0],i[1],i[2],i[3]);
          break;
    case 3:printf("每一位数分别为%d,%d,%d,%d\n",i[2],i[1],i[0]);
          printf("反序数字为%d%d%d\n",i[0],i[1],i[2]);
          break;
    case 2:printf("每一位数分别为%d,%d\n",i[1],i[0]);
          printf("反序数字为%d%d\n",i[0],i[1]);
          break;
    case 1:printf("每一位数分别为%d\n",i[0]);
          printf("反序数字为%d\n",i[0]);
          break;
}
}
搜索更多相关主题的帖子: include C语言 
2012-03-23 20:34
银音追梦
Rank: 1
等 级:新手上路
帖 子:5
专家分:1
注 册:2012-3-23
收藏
得分:0 
。。。有分的。。。告诉快来帮帮忙吧
2012-03-23 20:37
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <string.h>
main()
{ int n;
  char a[6],*p;               
printf("请输入一个整数,不大于99999:");
scanf("%d",&n);
sprintf(a,"%d",n);
printf("%d\n",strlen(a));
p = a;
while(*p)printf("%c ",*p++);
}

先试试这个  没带编译器

                                         
===========深入<----------------->浅出============
2012-03-23 20:41
c_cup
Rank: 2
等 级:论坛游民
帖 子:20
专家分:71
注 册:2012-3-21
收藏
得分:3 
我运行了一遍  很正常...

int i[4] 最好设为 i[5]

case 3:printf("每一位数分别为%d,%d,%d,%d\n",i[2],i[1],i[0]);多写了一个%d
 

成功就像怀孕,大家都来恭喜你,但是没人知道你被操了多少次.
2012-03-23 20:49
虚心向学
Rank: 2
等 级:论坛游民
帖 子:19
专家分:12
注 册:2011-2-15
收藏
得分:3 
首先 数组i[4],最多只能取到元素i[3],   可以定义数组为 int i[5]; 另外i[1]=n%100/10; 应该是i[1]=n/10%10;  

 #include <stdio.h>
 main()
 { long int n;
 int i[5],t;
                 
printf("请输入一个整数,不大于99999:");
 scanf("%ld",&n);
 if (n>99999) t=6;
 else if (n>9999) t=5;
 else if(n>999) t=4;
 else if(n>99) t=3;
 else if(n>9) t=2;
 else t=1;
 printf("这个数的位数为%d\n", t);
 i[4]=n/10000;
 i[3]=n/1000%10;
 i[2]=n/100%10;
 i[1]=n/10%10;
 i[0]=n%10;
 switch(t)
 {   case 6: printf("输入不符合要求!");
           break;
     case 5: printf("每一位数分别为%d,%d,%d,%d,%d\n",i[4],i[3],i[2],i[1],i[0]);
           printf("反序数字为%d%d%d%d%d\n",i[0],i[1],i[2],i[3],i[4]);
           break;
     case 4:printf("每一位数分别为%d,%d,%d,%d\n",i[3],i[2],i[1],i[0]);
           printf("反序数字为%d%d%d%d\n",i[0],i[1],i[2],i[3]);
           break;
     case 3:printf("每一位数分别为%d,%d,%d,%d\n",i[2],i[1],i[0]);
           printf("反序数字为%d%d%d\n",i[0],i[1],i[2]);
           break;
     case 2:printf("每一位数分别为%d,%d\n",i[1],i[0]);
           printf("反序数字为%d%d\n",i[0],i[1]);
           break;
     case 1:printf("每一位数分别为%d\n",i[0]);
           printf("反序数字为%d\n",i[0]);
           break;
 }
 }
运行没问题 楼主试试
2012-03-23 21:05
sunlang1234
Rank: 2
等 级:论坛游民
帖 子:47
专家分:77
注 册:2012-2-24
收藏
得分:1 
#include <stdio.h>

int main(void)
{
    long int n;
    int i[5],t;
               
    printf("请输入一个整数,不大于99999:");
    scanf("%ld",&n);
    if (n>99999) t=6;
    else if (n>9999) t=5;
    else if(n>999) t=4;
    else if(n>99) t=3;
    else if(n>9) t=2;
    else t=1;
    printf("这个数的位数为%d\n", t);
    i[4] = n / 10000;
    i[3] = n / 1000 % 10;
    i[2] = n / 100 % 10;
    i[1] = n % 100 / 10;
    i[0] = n % 10;
    switch(t)
    {
    case 6: printf("输入不符合要求!");
          break;
    case 5: printf("每一位数分别为%d,%d,%d,%d,%d\n",i[4],i[3],i[2],i[1],i[0]);
          printf("反序数字为%d%d%d%d%d\n",i[0],i[1],i[2],i[3],i[4]);
          break;
    case 4:printf("每一位数分别为%d,%d,%d,%d\n",i[3],i[2],i[1],i[0]);
          printf("反序数字为%d%d%d%d\n",i[0],i[1],i[2],i[3]);          break;
    case 3:printf("每一位数分别为%d,%d,%d,%d\n",i[2],i[1],i[0]);
          printf("反序数字为%d%d%d\n",i[0],i[1],i[2]);
          break;
    case 2:printf("每一位数分别为%d,%d\n",i[1],i[0]);
          printf("反序数字为%d%d\n",i[0],i[1]);
          break;
    case 1:printf("每一位数分别为%d\n",i[0]);
          printf("反序数字为%d\n",i[0]);
          break;
    }
    return 0;
}
2012-03-23 21:07
sunlang1234
Rank: 2
等 级:论坛游民
帖 子:47
专家分:77
注 册:2012-2-24
收藏
得分:1 
数组下标越界了,声明i[5],就对了。
2012-03-23 21:08
鹰派程序员
Rank: 2
等 级:论坛游民
帖 子:36
专家分:85
注 册:2012-2-3
收藏
得分:0 
你用这个试试,比你的好点!
你的问题首先是:数组的定义错了,int array【5】,此处的数值表示的是你数组中最多可以有的元素个数
#include <stdio.h>
main()
{
   long int n;
   int array[5];
   int t;
   int i;
   int ten_change=10;
               
   printf("Enter a integer,the number is samller than 1000000:");
   scanf("%ld",&n);
   if (n>99999) t=6;
   else if (n>9999) t=5;
   else if(n>999) t=4;
   else if(n>99) t=3;
   else if(n>9) t=2;
   else t=1;
   
   printf("The integer's bit number is: %d\n", t);
   for(i=0;i<t;i++)
   {
       array[i]=n%ten_change;
       n=n/ten_change;
     }   
    if(t==6)
    {  
     printf("Error!");
     }
     else
     {
           for(i=t-1;i>=0;i--)
           {
              printf("%d",array[i]);
           }
           printf("\n");
           for(i=0;i<t;i++)
           {
              printf("%d",array[i]);
           }
        
      }
}

[ 本帖最后由 鹰派程序员 于 2012-3-23 21:23 编辑 ]
2012-03-23 21:10
tangtangt
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:46
专家分:146
注 册:2012-1-22
收藏
得分:1 
四楼说的对,i[4]应该为i[5],而且是必须是。
int i[4]时总是出问题,是n的值那里就出问题了,所以出来全是零。但找不到n值出问题的原因。
int i[5]就一切正常。我怀疑是数组下标越界影响到n的值才导致错误的。
2012-03-23 21:11
sunfeilong93
Rank: 1
等 级:新手上路
帖 子:3
专家分:1
注 册:2012-3-10
收藏
得分:1 
#include <stdio.h>
int main()
{ long int n;
int i[5],t;
do{
               
printf("请输入一个整数,不大于99999: 输入任意字母结束程序\n");
if((scanf("%d",&n))!=1)
{
    getchar();
    t=7;
}
else if (n>99999) t=6;
else if (n>9999) t=5;
else if(n>999) t=4;
else if(n>99) t=3;
else if(n>9) t=2;
else t=1;
if(t<7){
printf("这个数的位数为%ld\n", t);
}
i[4]=n/10000;
i[3]=n/1000%10;
i[2]=n/100%10;
i[1]=n%100/10;
i[0]=n%10;
switch(t)
{   case 6: printf("输入不符合要求!");
          break;
    case 5: printf("每一位数分别为%d,%d,%d,%d,%d\n",i[4],i[3],i[2],i[1],i[0]);
          printf("反序数字为%d%d%d%d%d\n",i[0],i[1],i[2],i[3],i[4]);
          break;
    case 4:printf("每一位数分别为%d,%d,%d,%d\n",i[3],i[2],i[1],i[0]);
          printf("反序数字为%d%d%d%d\n",i[0],i[1],i[2],i[3]);
          break;
    case 3:printf("每一位数分别为%d,%d,%d\n",i[2],i[1],i[0]);
          printf("反序数字为%d%d%d\n",i[0],i[1],i[2]);
          break;
    case 2:printf("每一位数分别为%d,%d\n",i[1],i[0]);
          printf("反序数字为%d%d\n",i[0],i[1]);
          break;
    case 1:printf("每一位数分别为%d\n",i[0]);
          printf("反序数字为%d\n",i[0]);
          break;
    default :
        printf("程序结束,谢谢使用\n");
        break;
}
}while(t!=7);
return 0;
}




主要是定义的数组只能使用到i[4],把i[4]改成i[5]就行了,这个程序可以循环运行,功能可以更全面。
2012-03-23 23:09
快速回复:一道简单的C语言题目,求指教,找错误。。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019217 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved