“如何在函数内部的指针(数组)中使用scanf”

时间:2019-05-10 16:03:21

标签: c

我仍然不知道为什么下面的代码无法正常工作。当我跑步时,它只让我输入一次。有人可以告诉我如何解决它吗?谢谢。

我正在使用dev C编写代码,这是我的代码:

#include <stdio.h>
#include <stdlib.h>
void testFun(int *arr) {
    int i;
    for(i=0;i<2;i++) {
        printf("%d element: ", i+1);
        scanf("%d", *arr+i);
    }
}

int main() {
    int arr[2];
    testFun(arr);
}

它只允许我输入一次,而我想要的结果是两次。

2 个答案:

答案 0 :(得分:1)

scanf("%d", *arr+i);

您需要一个指向数组第ith个元素的指针

所以

scanf("%d", &arr[i]);

应该工作

答案 1 :(得分:0)

我不清楚您遇到了什么问题,但是对您的代码进行的这种小修改对我有用(并且紧密基于我在comment中的建议)。

#include <stdio.h>

static void testFun(int *arr)
{
    for (int i = 0; i < 2; i++)
    {
        printf("%d element: ", i + 1);
        scanf("%d", &arr[i]);
    }
}

int main(void)
{
    int arr[2];
    testFun(arr);
    for (int i = 0; i < 2; i++)
        printf("%d: %d\n", i + 1, arr[i]);
    return 0;
}

样品运行:

1 element: 234512
2 element: 872390
1: 234512
2: 872390

代码中存在各种未解决的缺陷,

  • 不将数组的大小传递给函数。
  • 不检查scanf()的结果-应该为1;如果不是,那就有问题。

我使用了C99风格的for循环;如果您坚持使用C90,请在循环外部声明i

您还可以使用:

scanf("%d", arr + i);