每次在C中的一维数组中存储一对数字

时间:2019-03-17 15:01:11

标签: c arrays

我是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;
    }

1 个答案:

答案 0 :(得分:1)

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

中的 SIZE 的条目数

如果未设置所有条目,则返回设置的条目数将在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 %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 $