A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

你们有这道题吗?你们是怎么做的?这段代码运行不了,错误显示找不到strrev这个函数架构,麻烦用你们的电脑运行看看!
#include <stdio.h>
#include <string.h>
void TentoAny(int number,char *str,int digits);

int main()
{
    //十进制整数和要转换的进制数值
    int number,digit;
   
    //存放被转换的数值
    char str[80];
   
    printf("输入一个十进制数:");
   
    scanf("%d",&number);
   
    printf("\n---------2到16进制对应关系----------\n");
    for(i=2;i<=16;i++)
    {
        //调用函数
        TentoAny(number,str,digit);

        printf("%d转换为%d进制为:%s\n",number,digit,str);
    }
    return 0;
}
void TentoAny(int numbers,char *str,int digits)
{
    int i=0;
    if(digits>16||digits<2)//非2~16进制则直接退出
        return ;
    while(numbers)
    {
        switch(numbers%digits)
        {
            //根据余数的情况做相应处理
            case 15:
                str[i++]='F';
                break;
            case 14:
                str[i++]='E';
                break;
            case 13:
                str[i++]='D';
                break;
            case 12:
                str[i++]='C';
                break;
            case 11:
                str[i++]='B';
                break;
            case 10:
                str[i++]='A';
                break;
            default:
                str[i++]=numbers%digits+'0';
                break;
        }
        numbers=numbers/digits;
    }
    str[i]='\0';
    //strrev函数定义在string.h中的,是对字符串做逆序处理的函数
    //这里需要逆序的原因是因为得到的结果为该进制的逆序
    strrev(str);

}

本帖被以下淘专辑推荐:

9 个回复

倒序浏览
编译没通过。运行不了啊

回复 使用道具 举报
你没发现  你的digit根本就没有值吗
回复 使用道具 举报
你把   for(i=2;i<=16;i++)  改成 for(digits=2;digits<=16;digits++)  这样就对了  有个小问题就是你用的那个字符串反转函数并不是标准函数库中的,不过你可以自己写一个strrev函数  反正也很简单

点评

对阿 一语点醒梦中人!  发表于 2015-2-2 08:14
回复 使用道具 举报

那标准的反转函数是什么啊
回复 使用道具 举报
我这里建立了一个简单的代码实现这个功能,一起学习下。

#include <stdio.h>
#include <conio.h>

int main()
{
int num;
unsigned int i;
int R;
int bitnum[100];
printf("请输入一个十进制整数:");
scanf("%d",&num);
printf("请输入需要转换的进制数(2-16之间):");
scanf("%d",&R);
if(R<2||R>16)
{
  printf("输入数据错误");
  return 0;
}
else
for (i=0;num!=0;i++)

{
    bitnum[i]=num%R;
    num=num/R;  
}
while(i--)
  printf("%d",bitnum[i]);

return 0;
}
回复 使用道具 举报
wtj900 中级黑马 2015-8-28 07:22:06
7#
或许能提供些许帮助,请参考
#include <stdio.h>

int main()
{
    int i,num,R;                              
    char bitnum[100];
    printf("请输入一个十进制整数:");
    scanf("%d",&num);
    printf("请输入要转换的进制数(2-16之间):");
    scanf("%d",&R);
   
    if(R<2||R>16){                             //判断进制数范围
        printf("输入数据错误");
    }else
        //计算需要转换的进制数
        for (i=0;num!=0;i++){
            if (num % R >= 10) {
                bitnum[i]= 'A' + (num % R - 10);
            } else {
                bitnum[i]=num % R + '0';
            }
            num = num / R;
        }

    while(i--){                                //逆向输出
        printf("%c",bitnum[i]);
    }
    return 0;
}
回复 使用道具 举报
linexs 中级黑马 2015-11-16 01:17:00
8#
#include <stdio.h>

int main()
{
    int i,num,R; //自增i在外部定义,便于最后逆序输出
    char bit[100];
    printf("请输入一个十进制整数:");
    scanf("%d",&num);
    printf("请输入要转换的进制数(2-16之间):");
    scanf("%d",&R);
   
    if(R<2||R>16){ // 判断进制数范围
        printf("输入数据错误");
    }else
        // 计算需要转换的进制数
        for (i= 0;num!= 0;i++) {
            if (num % R >= 10) {
                bit[i]= 'A' + (num % R - 10);
            } else {
                bit[i]= '0' + num % R;
            }
            num = num / R;
        }
    // 逆向输出
    while(i--){
        printf("%c",bit[i]);
    }
   
    printf("\nThe end!\n");
    return 0;
}
回复 使用道具 举报
沐小妖mavs 来自手机 中级黑马 2015-12-5 02:14:21
9#
支持一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马