c - scanf 返回 0,即使输入已给出
问题描述
我正在尝试读取具有以下格式的整数列表(每个数字后面都有一个空格)
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;
}
它正在覆盖 array 的第一个元素input_arr
。将您的 for 循环修复为:
for(int i = 0; i < n; i++){
fenwick[i]=0;
}
它应该可以工作。您需要阅读堆栈分配的工作原理。
另外,请尝试以下操作:
for(int i = 2; i < n+2; i++){
fenwick[i]=0;
}
这应该覆盖两个元素。
您可以尝试的另一件事是更改两个数组的声明顺序,即使您的 for fenwick 数组的循环错误,它也会起作用。
推荐阅读
- mysql - Mysql/adventureworks 数据库/触发问题
- python - Pyspark - 打印来自 Kafka 的消息
- python - 在处理元组/列表时,Python 的堆栈是如何工作的?
- sql-server - SQL Server - 将一条记录合并到另一条记录并将引用第一个项目的项目更改为引用它合并到的项目
- dart - Flutter 中多个补间动画的问题 - 包含视频
- hive - Hive TEZ 需要很长时间来运行查询
- c++ - 我的 linux c++ gnu makefile 变量扩展的行为不像我预期的那样
- python-2.7 - 似乎没有缩进错误
- groovy - 如何在 Micronaut 中使用 GORM 检索发布数据,在控制器中对其进行验证并将其保存在数据库中?
- c# - 窗口查找工具(如 Spy++/Autoit)