我是C的初学者。我在此数组函数上遇到了麻烦。当我调用该函数时,它将每次要求输入一对数字(键,值),然后将其存储在一维数组中。我将不得不通过不断调用该函数一对一地存储这对。以下是我目前拥有的,我认为我没有正确存储
编辑:对不起,注意到我的问题有多糟糕。我认为我没有正确存储它,因为当我调用其他功能(总结值)时,我得到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;
}
in
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
可能还可能 length 是 arr 中的条目数量,即可在 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;
}
如果我添加该主要:
#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 %dn", 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 $