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 循环是错误的,它也会起作用。
我正在尝试读取具有以下格式的整数列表(每个数字后有一个 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 循环是错误的,它也会起作用。