Есть ли способ решить инициализацию локальных переменных в структурах? - PullRequest
0 голосов
/ 07 марта 2020

Итак, моей группе было поручено составить расписание занятий, в котором регистрируется пользователь (ввод кода курса, кода предложения, время и день и т. Д. c.), И когда я кодировал, я наткнулся на ошибку в своем menu функция, что локальная переменная classs не инициализирована.

Чего-то мне не хватает?

Я новичок в C, и объединение указателей, структур и строк немного сбивает с толку.

Вот весь код:

   #include<stdio.h>
   #include<conio.h>
   #include<string.h>
   #include<stdlib.h>

   #define P printf
   #define S scanf

   void menu(struct class_sched *classs, int choice);
   void registerclass (struct class_sched *classs); 

   struct data {  
        char course_code[10];
        int offer_code;
        char course_name[6];
        char room_no[7];
        char faculty_name[30];
        char time[20];
        char day[3];
   };

    struct class_sched {
           struct data sched;
   };                                       

 int main (void){

    int info = 0;
    int choice;
    struct class_sched *classs;

    printf("MENU\n");
    printf("\n[1]Registration \n[2]Checking \n[3]Exit\n");
    S("%d",&choice);

    menu(classs,choice); //the error in question or specified

    getch();
    system("cls");
}

void menu(struct class_sched *classs,int choice){ //the Main Menu for the program

    switch (choice)
    {
    case 1: 
        registerclass(classs); 
        break;
    default:
        break;
    }
}

void registerclass (struct class_sched *classs){ // for registering or the inputs for the user

        P("Registration \n");
        P("input: \nCourse Code: "); fflush(stdin); gets(classs->sched.course_code);
        P("Offer Code: "); fflush(stdin);S("%d",&classs->sched.offer_code);
        P("Course Name: "); fflush(stdin); gets(classs->sched.course_name);
        P("Room Number: "); fflush(stdin); gets(classs->sched.room_no);
        P("Faculty Name: "); fflush(stdin); gets(classs->sched.faculty_name);
        P("Time: "); fflush(stdin); gets(classs->sched.time);
        P("Day: "); fflush(stdin); gets(classs->sched.day);

}

1 Ответ

4 голосов
/ 07 марта 2020

[...] в моей функции "меню", что локальная переменная "classs" не инициализирована. Я что-то упускаю?

Да, вы пропускаете что-то инициализированное.

В main() код определяет указатель classs

 struct class_sched *classs;

без инициализации .

Затем далее код передает этот самый (все еще неинициализированный ) указатель classs на menu():

 menu(classs, choice); //the error in question or specified

Это может Чтобы решить эту проблему, определите внутри main() структуру, например:

 struct class_sched classs;

и передайте menu() ее адрес:

 menu(&classs, choice); 

Две другие проблемы:

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