我是编码的新手,如果这是一个愚蠢的问题,我深表歉意。我正在将值写入数组,以使数组中的位置与该值相对应,以便数组中的第一个位置为1,数组中的第二个位置为2,数组中的第n个位置的值为n。在您输入8之前,此代码一直有效。

#include <stdio.h>

int a = 0, b = 0;

int main(void){
    int die[b];
    printf("Input how many sides your die has \n");
    scanf("%i", &b);
    for(a = 1; a <= b; a++){
        die[a] = a;
    }
    for(a = 1; a <= b; a++){
        printf("%i  ", die[a]);
    }
}


但是,此代码适用于任何输入的值。

#include <stdio.h>

int a = 0,b = 0;

int main(void){
    printf("Input how many sides your die has \n");
    scanf("%i", &b);
    int die[b];
    for(a = 1; a <= b; a++){
        die[a] = a;
    }
    for(a = 1; a <= b; a++){
        printf("%i  ", die[a]);
    }
}


我的问题是,为什么更改scanf的位置以及数组的声明会改变代码的工作方式?

最佳答案

这两个代码示例均导致未定义行为。数组索引应从0开始。您的循环应如下所示:

for(a=0; a < b; a++){


在您的第一个代码样本中,int die[b]; b初始化为0。只有在scanf之后,它才被初始化为用户定义的输入。

int的格式说明符也是%d

关于c - 数组长度(以C为单位),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36256917/

10-12 14:41
查看更多