«Как использовать scanf с указателем (массивами) внутри функции» - PullRequest
0 голосов
/ 10 мая 2019

Я до сих пор не знаю, почему мой код ниже не работает правильно. Когда я побежал, он просто позволил мне войти один раз. Может кто-нибудь показать мне, как это исправить? Спасибо.

Я использую 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 ]

1 голос
/ 10 мая 2019

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

Вам нужен указатель на i-й элемент массива

So

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

должно работать

0 голосов
/ 10 мая 2019

Мне не ясно, какие у вас были проблемы, но эта незначительная адаптация вашего кода работает для меня (и тесно связана с тем, что я предложил в моем комментарии ).

#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() - он должен быть один;если это не так, есть проблема.

Я использовал петли в стиле C99 for;если вы застряли с C90, объявите i вне циклов.

Вы также можете использовать:

scanf("%d", arr + i);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...