米粒12a 2017-03-19 03:02 采纳率: 100%
浏览 840
已采纳

关于C语言数组的一个问题

 /*问题描述
  从键盘输入一个不超过8位的正的十六进制数字符串,将它转换为正的十进制数后输出。
  注:十六进制数中的10~15分别用大写的英文字母A、B、C、D、E、F表示。
样例输入
FFFF
样例输出
65535*/

#include <stdio.h>
#include<string.h>
#define MAXSIZE 10
char data[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
int main(){
    int len, i, j, k, m;
    long z=0;
    char input[MAXSIZE];
    scanf("%s", &input);
    len=strlen(input);
    for(i=0;i<len;i++){
        for(k=0;k<16;k++){
            if(input[i] == data[k]){
                m=k;
                break;
            }
        }
        for(j=0;j<len-i-1;j++){
            m*=16;  
        }
        z+=m;
    }
    printf("%I64d",z);
    return 0;
}

这样是正确的,但是如果我把char data[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};改成char data[15]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};之后,输入Fprint出来就是0.这是为什么呢?

  • 写回答

1条回答 默认 最新

  • Vengeful_Spirit 2017-03-19 03:50
    关注

    char data[] 的方式声明字符数组时,后面有多少个字符该变量就有多少个字符长度;
    如果 char data[15]的话,说明此字符数组只有十五个变量空间.遍历数组的时候找不到你输入字符 F,根据你的函数逻辑,最后的结果就是 0

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记