我是编码的新手,如果这是一个愚蠢的问题,我深表歉意。我正在将值写入数组,以使数组中的位置与该值相对应,以便数组中的第一个位置为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/