标题:进制转换问题
只看楼主
edwardflee
Rank: 4
等 级:业余侠客
帖 子:145
专家分:234
注 册:2011-7-27
得分:0 
程序代码:
# include"stdio.h"
# include"math.h"

void convert10_8(int num)
{
    int array[6]={0};
    int i=5;
    int a,j;
    for(a=num; a>0; a=a/8)
    {
        array[i]=a%8;
        --i;
    }
printf("10_8 output is=");
    while(array[i]==0)        //这个循环执行不了,没有进行++i,所以后面输出是从j=-1开始的,就多了一个数字
    {
        ++i;
    }
    for(j=i; j<6; j++)        //不要上面的while循环,把这一句改成for(j=0; j<6; j++),就可以了   
    printf("%d",array[j]);
    printf("\n");
}

main()
{
    int num;
    while(1)
    {
        printf("input one number:\n");
        scanf("%d",&num);
        convert10_8(num);
    }

}

学C的秘诀=每天都来泡论坛
2011-09-27 08:37
cq_liyu_fish
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2011-9-20
得分:0 
回复 8楼 ningye
这个while是用来去掉右端0的~~
是我没处理的好~~像你这种简单的++i就可以以实现不输出右端无用0~~~
谢谢指点
2011-09-27 09:39
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
得分:0 
回复 楼主 cq_liyu_fish
如下修改即可,且不会出现安全隐患。

# include<stdio.h>
# include<math.h>

void convert10_8(int num)
{
     int array[6]={0};  //要尽量长些,防止出现过界。
     int i=5;
     int a,j;

     for(a=num; a > 0, i > 0; a=a/8)
     {
          array[i]=a%8;
          --i;
     }
     /*楼上说的对,i 此时 == -1,而array[-1] != 0*/
     
     i = 0;

     printf("10_8 output is=");
     while(array[i]==0)      //这个功能是必须的,需要去掉数组中的多余0位,
                            //但是,按照8进制规范,要保留一个0位,所以,i需要清0,需要添加一个0位
     {
          ++i;
     }
     for(j=i; j<6; j++)
          printf("%d",array[j]);
     printf("\n");
}

main()
{
     int num;
     while(1)
     {
          printf("input one number:\n");
          scanf("%d",&num);
          convert10_8(num);
     }
     
}
2011-09-27 09:41
xdh0817
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:193
专家分:195
注 册:2011-10-20
得分:0 
for(a=num; a>0; a=a/8)
    {
        array[i]=a%8;
        --i;
    }
最后是-1了
2011-12-30 01:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-350958-1-1.html




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

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