C中的一维数组的元素在某些索引后未显示

时间:2019-04-26 20:37:53

标签: c arrays

我是C初学者,我正在写一个程序,该程序基本上将十进制数转换为以6为基数,但是第五位以上的数字不会显示。 当我输入56400作为要转换的数字时,程序的输出是13040而不是1113040,这是正确的答案。

我记得java使用数组的方式,因此我搜寻了一种创建动态大小数组的方式。我发现使用alloc和malloc我基本上永远不会耗尽我的数组空间。我不太了解它,因为我没有看到指针和所有爵士乐,最后,我也不知道如何实现它。所以我决定尝试不同的方法:

首先:算法本身是不可能的。它可以显示一个数字,其位数不超过5,而您自己尝试一下,基本上可以给出正确的答案。 第二:我试图定义数组的大小,以了解这是否是问题所在。因此,我将数组定义为具有8个元素,然后发生的事情是,如果我的十进制数给出的base6包含8位数字,则该数字可以正确显示,如果不正确,则它给出的真是奇数,例如-7600或-200万左右。 / p>

这是代码:我的主要方法和将数字转换为6的函数,我认为问题出在这里。

/*Translations:
residuo: remainder
division: quotient of a division
adicion: sum, addition
numeroBase6: my number in base 6*/
int toBase6(int number) {
    int division = number;
    int residuo;
    int y = 1;
    int numeroBase6[y];
    int adicion = 0;
    int numSix = 0;

    residuo = division % 6;
    division = division / 6;
    numeroBase6[0] = residuo;
    while(division > 0) {
        residuo = division % 6;
        division = division / 6;
        if(division >= 0){ 
            numeroBase6[y] = residuo;
            y++;
        }else {
            numeroBase6[y] = division;
        }
    }

    for(int x = 0; x <= sizeof numeroBase6; x++) {
        adicion = numeroBase6[x] * pow(10, x);
        numSix += adicion;
    }
    return numSix;
}

我的主要方法是:

        int num1;
    int resultado;

    printf("Escriba un numero en decimal: "); //Print "Write your decimal number"
    scanf("%d", &num1);
    resultado = toBase6(num1);
    printf("\nNumero en base 6 es: %d\n", resultado); //Print "Your number in base 6 is: "

所以我想知道的是如何显示大于5的数字数组?

1 个答案:

答案 0 :(得分:1)

执行此操作时:

int y = 1;
int numeroBase6[y];

您创建一个大小为1的数组,该数组将始终为该大小。大小不会因为y的值而改变。结果,您在数组的末尾写了第一个数字之后的每个数字。这将调用undefined behavior

基数6的位数不应超过基数10的位数的两倍,并且32位int最多具有10个十进制数字,因此只需将数组定义为具有25个元素。这应该足以覆盖所有可能的值。

int numeroBase6[25];

此外,如果您尝试对以6为基数的数字进行十进制编码:

for(int x = 0; x <= sizeof numeroBase6; x++) {
    adicion = numeroBase6[x] * pow(10, x);
    numSix += adicion;
}
return numSix;

您可能最终溢出int可以容纳的内容。而是这样做,直接创建字符串表示形式并返回字符串。