gpt4 book ai didi

c - C 中的数组长度

转载 作者:行者123 更新时间:2023-11-30 18:29:37 25 4
gpt4 key购买 nike

我是编码新手,所以如果这是一个愚蠢的问题,我深表歉意。我将值写入数组,使得数组中的位置对应于该值,数组中的第一个位置是 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 之后,它才会被初始化为用户定义的输入。

此外,ints 的格式说明符是 %d

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com