Мне нужна помощь с этой функцией void на языке Си. - PullRequest
0 голосов
/ 13 июня 2011
void insert(int* h, int* n)
{
    printf("give numbers");

    scanf("%d %d", h, n);
}

Это функция void, которую я сделал. Предполагается, что эта функция дает мне высоту (h) и количество ударов (n), когда мяч падает на землю. Эти номера импортируются пользователем.

Если указанная выше функция верна, как я могу ее вызвать?

Ответы [ 5 ]

6 голосов
/ 13 июня 2011

Вы можете вызвать его следующим образом:

int h;
int n;
insert(&h, &n);

Где & означает «получить адрес».

Но будьте осторожны: в вашей функции нет ошибок-обработка для ошибочного пользовательского ввода.

2 голосов
/ 13 июня 2011

Вы можете назвать это двумя способами:

// Method 1
int h, n;
insert(&h, &n);

// Method 2 (if you need to return the pointers or anything else weird for some reason
// I think this is useful in some cases when you are using a library that requires you
// to pass in heap-allocated memory
int *h = malloc(sizeof(int));
int *n = malloc(sizeof(int));
if(h == NULL || n == NULL)
     exit(1);

insert(h, n);

// Stuff

free(h);
free(n);
h = n = NULL;
1 голос
/ 13 июня 2011
insert(&h, &n)

Оператор & получает адрес переменных (указатель на него), а затем передает эти указатели в функцию.Затем Scanf использует эти точки как места для записи значений, которые вводит пользователь.

0 голосов
/ 13 июня 2011

Это в основном правильно, но это printf() не гарантируется.stdout может быть буферизованной строкой, поэтому вам нужно будет ввести fflush().

0 голосов
/ 13 июня 2011

Вот как должен выглядеть ваш код:

   #include <stdio.h>

   void insert(int*, int*)

   int main()
   {
      int n, h;
      insert(&h, &n);

      return 0;
   }
   void insert(int* h, int* n)
   {
       printf("give numbers");

       scanf("%d %d", h, n);
   }

Однако, как и @Oli, ваша программа прервется, если я введу a, 3.5 или что-то, кроме int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...