尝试此操作时(下面的代码),控制台甚至不会请求输入值,然后吐出一个随机数(可能来自先前存储在该位置的数字)。
为什么这不起作用,我该如何解决?
int main( ) {
int arr[3];
for(int i = sizeof(arr); i <= 0; i--) {
scanf("%d", &arr[i]);
}
printf("%d", arr[2]);
return 0;
}
答案 0 :(得分:2)
有两件事是错的。
假设您想要数组中的元素数量,则使用以下命令完成:
size_t len = sizeof(arr) / sizeof(*arr)
sizeof
给出实际大小(为arr分配的字节数。
len - 1
而不是len
开始。 注意:数组索引 0基于而不是基于1,因此数组元素是从0 to 2
建立的索引但是你会试图访问arr [3] ],这可能导致未定义的行为。
i <= 0
。所以,我从让我们说2
开始,是2 <= 0
? NO!因此它永远不会进入循环。正确的条件是i >= 0
int len = sizeof(arr) / sizeof(*arr);
for(int i = len - 1; i >= 0; i--)
好吧,我不知道你为什么要接受逆序输入,但一般惯例是使用输入来输入:
size_t len = sizeof(arr)/sizeof(*arr);
for (i = 0; i < len; i++)
{
// take input
}
编辑:
从其他评论看来,您似乎并不了解for
循环。
查看此answer
请评论任何进一步的澄清。
答案 1 :(得分:1)
i <= 0
由于i的初始值大于零,代码永远不会进入循环。
答案 2 :(得分:0)
由于i--
会降低i
的值,并且循环条件为i <=0
以启动循环,i
必须为0或者为负。因为{{ 1}}将返回12(3个元素,每个元素有4个字节(int有4个字节)),该值将为posivite,大于0所以我们需要更改循环条件以检查arr[3]
是否为正< / p>
i
答案 3 :(得分:0)
值得注意的是,在C语言中,除了Java / Python等语言之外,您必须明确知道数组的长度,sizeof
将 NOT 为您提供项目数量在阵列中。
int main() {
int arr[3];
int itemsInArray = 3;
for(int i = itemsInArray-1; i >= 0; i--) {
scanf("%d", &arr[i]);
}
printf("%d", arr[2]);
return 0;
};
答案 4 :(得分:-2)
您的代码存在一些问题:首先,sizeof(arr)不会像您想象的那样返回“3”; “arr”是指向arr [0]的指针,因此您正在请求int指针的大小
其次,i&lt; = 0阻止循环甚至被执行
最后,请将数组设置为零,同时声明最佳实践,即:
int arr [3] = {0};
编辑:我的错误拼写了我的想法:你要求分配给阵列的整个内存区域的大小。
以下评论已得到纠正。