Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在for循环中使用printf()_C_Printf - Fatal编程技术网

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);i
i您的代码有几个问题:首先,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],这可能会导致未定义的行为


  • 您编写了
    i
    for(int i=sizeof(arr);i
    for(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
    }