c语言 十六进制转换成十进制数,不知道哪里错了,如何解决

经验不够,不知道有没有相关的函数,只能写一大串代码,但是写完又不知道哪里错了,不管输啥结果都是一样的。

img

case后面都要加break啊

1.case后面没加break,导致贯穿标签
2.直接减掉ascii码就可以了,三个if的事,写那么多不累吗

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7694605
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:用C语言编写一个程序,可以一直接收键盘字符, 如果是小写字符就输出对应的大写字符, 如果接收的是大写字符,就输出对应的小写字符, 如果是数字不输出。
  • 除此之外, 这篇博客: 用C语言实现计算当年日期加10后的日期中的 博主前几天参加校招,遇到如题这样的一个编程题,考场上时间紧迫,写的不好,下来之后,重新想了一个思路,下边是代码,仅供参考。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include<stdio.h>
    int main(){
        int days[] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
        int year,month,day;
        printf("请输入年-月-日:\n");
        scanf("%d-%d-%d",&year,&month,&day);
        if(year%4==0&&year%100!=0||year%400==0){//判断是否闰年
            days[2]++;//二月29天
        }
        if(((day+10)%days[month])==0){ //判断加10天后月份会不会加1
            day=day+10;
            printf("10天后的时间为:\n%d-%d-%d",year,month,day);
        }
        else{ //月份加1
            day=day+10-days[month];
            month++;
            if(month>12) { //判断月份++以后是否大于12
                year++; //大于12,年份加1
                month-=12;//月份置为1
            }
            printf("10天后的时间为:\n%d-%d-%d",year,month,day);
        }
        return 0;
    }

  • 您还可以看一下 CSDN讲师老师的C语言精髓之编译过程视频教程课程中的 计算机的组成部分,栈内存的特点;画出内存图,引入指针的概念小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    问题的解决方案如下:

    根据参考资料中的原理介绍,十六进制转换为十进制需要先将十六进制数转换为二进制,再将二进制转换为十进制。根据参考资料的思路和代码示例,可以编写一个函数,输入一个十六进制数,输出相应的十进制数。

    1. 首先,定义一个函数hexadecimal_decimal,输入参数为一个字符串str,表示十六进制数。
    2. 在函数hexadecimal_decimal中,先获取字符串的长度,计算最后一位的索引length,并定义变量sum用于累加计算结果。
    3. 接着,使用循环从第一位开始遍历到最后一位(即从左到右遍历),依次处理每一位。
    4. 在循环中,先判断当前位的字符是数字还是字母,根据字符值计算当前位的值a。如果是数字,则直接将字符减去字符'0'得到数值;如果是大写字母,则将字符减去字符'A'再加上10;如果是小写字母,则将字符减去字符'a'再加上10。
    5. 接着,计算当前位的权值term,使用公式term = a * pow(16, length - i),其中pow是计算幂的函数。
    6. 将当前位的权值加到总和sum中。
    7. 循环结束后,输出最终的十进制数sum
    8. main函数中,获取用户输入的十六进制数,调用函数hexadecimal_decimal进行转换,输出结果。

    下面是具体的代码实现:

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    
    void hexadecimal_decimal(char str[]);
    
    int main() {
        char string[1000];
        printf("please enter a hexadecimal number: ");
        gets(string);
        hexadecimal_decimal(string);
        return 0;
    }
    
    void hexadecimal_decimal(char str[]) {
        int length = strlen(str) - 1;
        int sum = 0;
        int a, term;
    
        for (int i = 0; i <= length; i++) {
            if (str[i] >= '0' && str[i] <= '9')
                a = str[i] - '0';
            else if (str[i] >= 'A' && str[i] <= 'F')
                a = 10 + (str[i] - 'A');
            else if (str[i] >= 'a' && str[i] <= 'f')
                a = 10 + (str[i] - 'a');
    
            term = a * pow(16, length - i);
            sum += term;
        }
    
        printf("The decimal number is: %d\n", sum);
    }
    

    你可以按照以下步骤来运行代码:

    1. 将上述代码保存为一个文件,例如 hex_to_decimal.c
    2. 打开终端或命令行窗口,进入代码文件所在的目录。
    3. 使用编译器(例如gcc)编译代码,命令如下: gcc -o hex_to_decimal hex_to_decimal.c -lm -o指定输出的可执行文件名为 hex_to_decimal-lm用于链接 math.h 中的库函数 pow。
    4. 运行可执行文件,命令如下: ./hex_to_decimal
    5. 输入一个十六进制数,按下回车键即可得到相应的十进制数。

    注意:由于参考资料中的代码使用了gets函数来获取用户输入,但该函数存在安全性问题并已被大多数编译器废弃,建议使用更安全的替代函数fgets来获取用户输入。修改代码如下:

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    
    void hexadecimal_decimal(char str[]);
    
    int main() {
        char string[1000];
        printf("please enter a hexadecimal number: ");
        fgets(string, sizeof(string), stdin);
        // 去除输入字符串的换行符
        string[strcspn(string, "\n")] = '\0';
        hexadecimal_decimal(string);
        return 0;
    }
    
    void hexadecimal_decimal(char str[]) {
        int length = strlen(str) - 1;
        int sum = 0;
        int a, term;
    
        for (int i = 0; i <= length; i++) {
            if (str[i] >= '0' && str[i] <= '9')
                a = str[i] - '0';
            else if (str[i] >= 'A' && str[i] <= 'F')
                a = 10 + (str[i] - 'A');
            else if (str[i] >= 'a' && str[i] <= 'f')
                a = 10 + (str[i] - 'a');
    
            term = a * pow(16, length - i);
            sum += term;
        }
    
        printf("The decimal number is: %d\n", sum);
    }
    

    运行该代码的步骤与之前相同。输入十六进制数时,以回车键结束输入。