| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 754 人关注过本帖, 1 人收藏
标题:c语言进制转换问题,感觉没啥问题为什么结果不对啊!
只看楼主 加入收藏
小杨姓张
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-12-4
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:3 
c语言进制转换问题,感觉没啥问题为什么结果不对啊!
#include<stdio.h>                                        //头文件

void TtoT(char num1);                                    //10 to 2 函数声明
void TtoE(char num2);                                    //10 to 8 函数声明
void TtoS(char num3);                                    //10 to 16 函数声明
                                    

void main()                                                //主函数
{   
    char cs,num;                                    //定义变量cs num
    while(1)                                            //死循环
    {
        printf("10 TO 2     请按1\n");                    //输出10 TO 2  请按1
        printf("10 TO 8     请按2\n");                    //输出10 TO 8  请按2
        printf("10 TO 16    请按3\n");                    //输出10 TO 16  请按3
        scanf("%d",&cs);                                //输入cs的值
        switch(cs)                                        //switch语句
        {
            case 1:
                printf("请输入要转换的十进制数:");        //输出请输入要转换的十进制数:
                scanf("%d",&num);                        //输入数字
                TtoT(num);                                //调用函数TtoT
                break;                                    //跳出switch语句
            case 2:
                printf("请输入要转换的十进制数:");     //输出请输入要转换的十进制数:
                scanf("%d",&num);                        //输入数字
                TtoE(num);                                //调用函数TtoE
                break;                                    //跳出switch语句
            case 3:
                printf("请输入要转换的十进制数:");     //输出请输入要转换的十进制数:
                scanf("%d",&num);                        //输入数字
                TtoS(num);                                //调用函数TtoS
                break;                                    //跳出switch语句
        }
        printf("\n");
        printf("\n");                                    //换行   目的是第二次进入switch之前换行避免与上一次重行
    }
}

void TtoT(char num1)                                        //函数TtoT
{
    int    n;
    char a;                                            //定义变量
    char b[100];                                            //定义数组
    for(n=0;num1!=0;n++)                                //for循环
    {
        a = num1/2;                                        //取商
        b[n] = num1%2;                                    //取余
        num1 = a;                                        //将a的值给num1
    }
    printf("10 TO 2 值:");                                //输出10 TO 2 值:
    for(;n+1>0;n--)                                        //for循环
    {
        printf("%d",b[n]);                              //输出结果
    }
}

void TtoE(char num2)                                    //函数TtoE
{
    int  n;                                            //定义变量
    char a,b[100];                                        //定义数组
    for(n=0;num2!=0;n++)                                //for循环
    {
        a = num2/8;                                        //取商
        b[n] = num2%8;                                    //取余
        num2 = a;                                        //将a的值给num2
    }
    printf("10 TO 8 值:");                                //输出10 TO 8 值:
    for(;n+1>0;n--)                                        //for循环
    {
        printf("%d",b[n]);                                //输出结果   
    }
}

void TtoS(char num3)                                    //函数TtoS
{
    int    n,d;                                            //定义变量
    char a,b[100],c[]={'A','B','C','D','E','F'};        //定义数组
    for(n=0;num3!=0;n++)                                //for循环
    {
        a = num3/16;                                    //取商
        b[n] = num3%16;                                    //取余
        if(b[n]>9)                                        //判断b[n]是否大于9
        {
            d=b[n]-10;                                    //取差值
            b[n]=c[d];                                    //将c对应的值给b
        }
        num3 = a;                                        //将a的值给num3
    }
    printf("10 TO 16 值:0x");                            //输出10 TO 16 值:0x
    for(;n+1>0;n--)                                        //for循环
    {
        if(b[n]>9)                                        //判断b[n]是否大于9
        {
            printf("%c",b[n]);                            //输出结果
        }
        else
        {
            printf("%d",b[n]);                            //输出结果
        }
    }
}
搜索更多相关主题的帖子: include c语言 
2016-12-04 23:06
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:10 
代码太长了,只是改了一个二进制的样板,八进制的按照这个修改就行了~主要是数据类型匹配问题
至于16进制的字母表示,要好好斟酌一下~

程序代码:
#include<stdio.h>                                        //头文件

void TtoT(int num1);                                    //10 to 2 函数声明
void TtoE(int num2);                                    //10 to 8 函数声明
void TtoS(int num3);                                    //10 to 16 函数声明
                                    

void main()                                                //主函数
{    
    int cs;
    int num;                                    //定义变量cs num
    while(1)                                            //死循环
    {
        printf("10 TO 2     请按1\n");                    //输出10 TO 2  请按1
        printf("10 TO 8     请按2\n");                    //输出10 TO 8  请按2
        printf("10 TO 16    请按3\n");                    //输出10 TO 16  请按3
        scanf("%d",&cs);                                //输入cs的值
        switch(cs)                                        //switch语句
        {
            case 1:
                printf("请输入要转换的十进制数:");        //输出请输入要转换的十进制数:
                scanf("%d",&num);                        //输入数字
                TtoT(num);                                //调用函数TtoT
                break;                                    //跳出switch语句
            case 2:
                printf("请输入要转换的十进制数:");     //输出请输入要转换的十进制数:
                scanf("%d",&num);                        //输入数字
                TtoE(num);                                //调用函数TtoE
                break;                                    //跳出switch语句
            case 3:
                printf("请输入要转换的十进制数:");     //输出请输入要转换的十进制数:
                scanf("%d",&num);                        //输入数字
                TtoS(num);                                //调用函数TtoS
                break;                                    //跳出switch语句
        }
        printf("\n");
        printf("\n");                                    //换行   目的是第二次进入switch之前换行避免与上一次重行
    }
}

void TtoT(int num1)//数据类型与int型不匹配                                        //函数TtoT
{
    int  n;
    int a;                                           //定义变量
    int b[100];                                            //定义数组
    for(n=0;num1!=0;n++)                                //for循环
    {
        a = num1/2;                                        //取商
        b[n] = num1%2;                                    //取余
        num1 = a;
                                                         //将a的值给num1
    }
    n--;//这里这里,由于最后一次循环要执行n++,固n要-1才能匹配~
    printf("10 TO 2 值:");                                //输出10 TO 2 值:
    for(;n+1>0;n--)                                        //for循环
    {
        printf("%d",b[n]);                              //输出结果
    }
}

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-12-05 01:11
小杨姓张
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2016-12-4
收藏
得分:0 
回复 2楼 九转星河
感谢大神!!!改好了!!!改了好久原来是n出了问题!祝大神好运!
2016-12-05 12:26
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:10 

试模拟 itoa 写了一个转2、8、16进制

#include <stdio.h>

char *_iitoa(unsigned int value, char *string, int radix)
{
    if (radix!=2 && radix!=8 && radix!=16)
        return NULL;
    if (value == 0)
    {
        *string = '0';
        *(string+1) = 0;
        return string;
    }
    char *num="0123456789ABCDEF";
    char *p1=string, *p2;
    for(; value>0; value/=radix)
        *p1++ = num[value%radix];
    *p1 = 0;
    p2 = --p1;
    p1 = string;
    for(; p1<p2; p1++, p2--)
    {
        *p1 ^= *p2;
        *p2 ^= *p1;
        *p1 ^= *p2;
    }
    return string;
}

main ()
{
    char s[33];
    printf("3456(10) == %s(2)\n", _iitoa(3456, s, 2));
    printf("3456(10) == %s(8)\n", _iitoa(3456, s, 8));
    printf("3456(10) == %s(16)\n", _iitoa(3456, s, 16));
    printf("-3456(10) == %s(2)\n", _iitoa(-3456, s, 2));
    printf("-3456(10) == %s(8)\n", _iitoa(-3456, s, 8));
    printf("-3456(10) == %s(16)\n", _iitoa(-3456, s,16));
}
2016-12-05 16:43
快速回复:c语言进制转换问题,感觉没啥问题为什么结果不对啊!
数据加载中...
 
   



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

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