C 在for循环中使用printf()
尝试此操作时(下面的代码),控制台甚至不请求输入值,然后吐出一个随机数(可能来自以前存储在该位置的数字) 为什么这不起作用?我如何修复它C 在for循环中使用printf(),c,printf,C,Printf,尝试此操作时(下面的代码),控制台甚至不请求输入值,然后吐出一个随机数(可能来自以前存储在该位置的数字) 为什么这不起作用?我如何修复它 int main( ) { int arr[3]; for(int i = sizeof(arr); i <= 0; i--) { scanf("%d", &arr[i]); } printf("%d", arr[2]); return 0; } int main(){ int-arr[3]
int main( ) {
int arr[3];
for(int i = sizeof(arr); i <= 0; i--) {
scanf("%d", &arr[i]);
}
printf("%d", arr[2]);
return 0;
}
int main(){
int-arr[3];
对于(int i=sizeof(arr);ii您的代码有几个问题:首先,sizeof(arr)不会像您可能认为的那样返回“3”;arr是指向arr[0]的指针,因此您请求的是int指针的大小。
其次,i,因为i--
将减小i
的值,循环的条件是i=0;i--){
scanf(“%d”和&arr[i]);
}
printf(“%d”,arr[2]);
返回0;
}
需要注意的是,在C语言中,除了Java/Python等语言外,您必须明确知道数组的长度,sizeof
将而不是提供数组中的项目数量
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;
};
有两件事是错误的
假设需要数组中的元素数,则可以使用以下方法完成此操作:
size\u t len=sizeof(arr)/sizeof(*arr)
sizeof
给出实际大小(分配给arr的字节数)
您应该从len-1
开始,而不是len
注意:数组索引是基于0的而不是基于1的,因此数组元素的索引范围是从0到2
,但您可能会尝试访问arr[3],这可能会导致未定义的行为
您编写了ifor(int i=sizeof(arr);ifor(int i=sizeof(arr)-1;i>=0;i--)
请参见sizeof(arr)
?您认为在这种情况下sizeof(arr)
是什么?另一个问题是sizeof
返回以字节为单位的大小,因此i
将从(可能)开始12或24.这不是循环的终止符吗?@HazzaOb不,for
循环的中间部分就像while
循环的条件:只要它是真的,循环就会重复。不。sizeof(anArray)
(如果它被称为像这里这样的数组,并且没有衰减到指针),返回整个数组的大小(以字节为单位)。是否需要执行第三点操作,因为所有数组元素仅用作左值。但是,它会以字节为单位提供数组的大小。sizeof arr/sizeof arr[0]
可以正常工作。arr[3]
不会返回3。arr[3]
不是数组的有效元素(索引3超出范围)。在您的问题中返回0的“it”是什么?sizeof(arr)
不返回0。您在说什么?@melpomene我再次编译了代码并返回3,但几分钟前它返回了0,奇怪。无论如何,非常感谢您的贡献否,sizeof(arr)
在常见的C实现上将是12
或24
。我写道,提问者“有意”有这种行为。即使他这样做了,那也是错误的。这里有两个挑剔之处:1.sizeof
返回size\u t
而不是int
2。)通过数组本身计算数组大小的首选模式是:chara[42];size_t s=sizeof arr/sizeof*arr;
为了完整性:sizeof
是一个运算符而不是函数,不需要括号,它不会被“调用”@alk谢谢!谢谢你的输入。我已经更新了答案。不过我有一个疑问。假设size\t len
在这种情况下,如果我做int I=len-1;
,那么I
包含什么?对于任何数组ta[N];
这个表达式sizeof a/sizeof*a;
永远不会被@alk使用,谢谢您的澄清。:)
#include <stdio.h>
int main( ) {
int arr[3]={0};
int i = sizeof(arr)/sizeof(arr[0]) -1;
for(; i >= 0; i--) {
scanf("%d", &arr[i]);
}
printf("%d", arr[2]);
return 0;
}
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;
};
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
}