c - 每次将一对数字存储在C中的一维数组中
问题描述
我是 C 的初学者。我在使用这个数组函数时遇到了问题。当我调用该函数时,它每次都会要求输入一对数字(键,值),并将其存储在一维数组中。我将不得不通过不断调用该函数来一对一地存储该对。以下是我目前拥有的,我认为我没有正确存储它
编辑:对不起,注意到我的问题有多糟糕。我认为我没有正确存储它,因为当我调用 sum (对值求和)等其他函数时,我得到 0 或错误的答案。此外,更新了代码以包含主要功能以获取更多详细信息。数组的大小限制为 100。
#define SIZE 100
int main(void) {
int arr[SIZE] = {0};
void insert_table(int arr[], int length) {
int i;
for (i=0; i<SIZE; i=i+2){
scanf("%d", &arr[i]);
scanf("%d", &arr[i+1];
break;
}
解决方案
在
void insert_table(int arr[], int length) { int i; for (i=0; i<SIZE; i=i+2){ scanf("%d", &arr[i]); scanf("%d", &arr[i+1]; break; }
你有几个问题:
在您(尝试)输入两个值后break停止您的循环,这可能不是您想要做的
您不检查scanf的结果,因此您不会检测到 EOF 也不会检测到无效输入
你认为SIZE是偶数,如果奇数你会用未定义的行为写出arr
可能长度也是arr中不必使用SIZE的条目数insert_table
如果未设置所有条目,则返回设置的条目数将在出现 EOF/错误时帮助调用者
更好的定义是:
size_t insert_table(int arr[], size_t length) {
size_t i;
for (i = 0; i < length - 1; i += 2){
if ((scanf("%d", &arr[i]) != 1) ||
(scanf("%d", &arr[i+1]) != 1))
return i;
}
return i;
}
如果我添加那个 main :
#define SIZE 100
int main()
{
int arr[SIZE];
size_t n = insert_table(arr, SIZE);
for (size_t i = 0; i != n; i += 2) {
printf("%d %d\n", arr[i], arr[i + 1]);
}
}
编译和执行:
pi@raspberrypi:/tmp $ gcc -pedantic -Wextra s.c
pi@raspberrypi:/tmp $ ./a.out
1 2 3 4 a
1 2
3 4
pi@raspberrypi:/tmp $ echo "1 2 3 4" | ./a.out
1 2
3 4
pi@raspberrypi:/tmp $ echo "1 2 3 4 5" | ./a.out
1 2
3 4
pi@raspberrypi:/tmp $
推荐阅读
- javascript - Vue 无法渲染具有父级的数据对象
- c# - 在充当目标的 SSIS 脚本组件中动态获取列名
- android - 谷歌地图位置权限不显示安卓版本8+安卓开发
- d3.js - D3 svg插入问题
- excel - Excel VBA将带有变量的公式插入单元格
- java - 使用 WebSecurity.ignoring() 时如何修复 CORS
- grafana - Grafana 中显示的 netdata 指标显示不正确的值
- html - 如何针对 Web 布局问题模拟高分辨率显示
- android - 如何以编程方式更改进度条的进度值?
- javascript - 如何在 React 中将我的子组件移动到新的父组件?