scanf returns 0,连以为输入都给定了

scanf returns 0, even thought input is given

我正在尝试读取具有以下格式的整数列表(每个数字后有一个 space)

8 6 
2 
5 
3 
7 
3 
5

然而,当我尝试读取它时,数​​字 2 始终为 0。

编辑: 我以为我不需要完整的代码,但这是要重现的完整代码。

#include <stdio.h>
int main(){
    int n; //=8
    scanf("%d", &n);
    int m; //=6
    scanf("%d", &m);
    int input_arr[m];
    int fenwick[n];

    //Makes input array
    for(int i = 0; i < m; i++){
        int v;
        scanf("%d",&v);
        input_arr[i] = v;
    }
    
    //Initializes fenwick tree
    for(int i = 1; i < n+1; i++){
        fenwick[i]=0;
    }
    
    printf("%d \n", input_arr[0]); //prints 0

    printf("%d %d\n",n,m); //prints 8 and 6
    
    for(int i = 0; i < m; i++){
        printf("%d ",input_arr[i]); //prints 0 5 3 7 3 5 
    }

    return 1;
}

您的问题来自不正确的 for 循环。当您执行以下操作时:

for(int i = 1; i < n+1; i++){
        fenwick[i]=0;
    }

它正在覆盖数组 input_arr 的第一个元素。将 for 循环修复为:

for(int i = 0; i < n; i++){
        fenwick[i]=0;
    }

它应该可以工作。您需要阅读堆栈分配的工作原理。

此外,请尝试以下操作:

for(int i = 2; i < n+2; i++){
    fenwick[i]=0;
}

应该覆盖两个元素。

您可以尝试的另一件事是更改两个数组的声明顺序,即使您的 fenwick 数组的 for 循环是错误的,它也会起作用。