Почему функции не вызываются во время выполнения? - PullRequest
0 голосов
/ 30 мая 2020

Я новичок в C. Я хочу разработать простой менеджер данных. в основной функции я вызываю функцию входа в систему, и она отлично работает. Затем я печатаю инструкцию и вызываю функцию choosetask. Командная служба ждет, когда я введу номер задачи. Затем программа завершается без вызова следующих функций.

int main()
{
  login ();
  printf ("choose a task to perform (write its number to go):\n 1- Insert the data of a new patient.\n 2- Assign a patient to a hospital.\n 3- Load a hospital patients data.\n 4- Delete a patient data.\n 5- Exit.\n\n");
  choosetask ();
  return 0;
}
void choosetask ()
{
    int tasknumber;

    scanf ("%d", tasknumber);

    if (tasknumber == 1)
    {
    newpatient ();
    }

    else if (tasknumber == 2)
    {
    assignpatient ();
    }

    else if (tasknumber == 3)
    {
    loadhospitaldata ();
    }

    else if (tasknumber == 4)
    {
    deletepatient ();
    }

    else if (tasknumber == 5)
    {
        exit(0);
    }

    else
    {
      printf ("Choose a valid task number, please\n");
      choosetask ();
    }
} 

1 Ответ

0 голосов
/ 30 мая 2020

Если вы используете gcc в режиме командной строки (здесь с Linux) со следующим исходным кодом:

$ cat test.c
#include <stdio.h>

int main(int argc, char **argv)
{
    int tasknumber;
    scanf ("%d", tasknumber);
    return 0;
}

, вы получите:

$ gcc -Wall test.c
test.c: In function ‘main’:
test.c:6:5: attention : format ‘%d’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=]
     scanf ("%d", tasknumber);
     ^
test.c:6:11: attention : ‘tasknumber’ is used uninitialized in this function [-Wuninitialized]
     scanf ("%d", tasknumber);
           ^

Если вы исправите свой исходный код:

$ cat test.c
#include <stdio.h>

int main(int argc, char **argv)
{
    int tasknumber;
    scanf ("%d", &tasknumber);
    return 0;
}

предупреждений больше не будет:

$ gcc -Wall test.c
$

Примечание: это всего лишь пример получения предупреждений первого уровня. Вы также можете использовать другие параметры g cc, например -pedantic, чтобы получать больше предупреждений или -std=c11, чтобы проверить соответствие стандарту C11.

...