В настоящее время я нахожусь в процессе программирования самой большой программы на Си, которую я когда-либо писал, для окончательного задания по одному из моих университетских модулей. Программа является модульной и содержит файлы, такие как main.c, librarian.c, Students.c и books.c. У каждого есть свой соответствующий заголовочный файл, и у меня также есть файл structs.h, содержащий две структуры: одну для книг и одну для студентов.
В настоящее время я сталкиваюсь с проблемой, когда библиотекарь пытается добавить в библиотеку новое членство студента, некоторые входные данные полностью пропускаются, и я не понимаю, почему.
Я постараюсь включить как можно меньше кода, но это может быть проблемой из-за размера моей программы.
Во-первых, вот структура моего студента, которая может иметь отношение к делу:
struct STUDENT //Structure variable for student
{
int id;
char *name[20];
char *pass[20];
int mobile;
float fee;
int age;
char *cat;
};
struct STUDENT student;
Теперь функция, которая вызывает у меня проблемы, такова:
int student_data(int answer){ //Function to add data of student to LIS
student_confirm();
int x = 15, x1 = 30;
int student_ID;
gotoxy(x,7);printf("Enter the Information Bellow");
gotoxy(x,10);printf("Student Name:"); gotoxy(x1,10);scanf(" %d",&student_ID);
if(student.id==student_ID){
gotoxy(x,11);printf("Id is already Exits");
getch(); add_student();
}
student.id=student_ID;
gotoxy(x,11);printf("User Name:");gotoxy(x1,11);scanf("%s",&student.name);
gotoxy(x,12);printf("Password:");gotoxy(x1,12);scanf("%s",&student.pass);
gotoxy(x,13);printf("Mobile:");gotoxy(x1,13);scanf("%d",&student.mobile);
gotoxy(x,14);printf("Fee:");gotoxy(x1,14);scanf("%f",&student.fee);
gotoxy(x,15);printf("Age:");gotoxy(x1,15);scanf("%d",&student.age);
return 1;
}
Функция student_confirm () просто спрашивает пользователя, уверены ли они, что хотят добавить нового ученика в библиотеку. Теперь, когда я запускаю программу, я вхожу в систему как библиотекарь, иду, чтобы добавить студента, и меня приветствуют в консоли
*****Library Information System*****
***Brotherton Library***
*1975*
____________________________________________
Confirm you would like to add a new student: (Y/N)
Enter the Information Bellow
Student Name:
User Name:
Password:
Он пропускает прямо к паролю, не позволяя мне ввести предыдущие два поля. Я полностью озадачен этим. В моей программе есть похожие части кода (например, для добавления книг), которые следуют той же логике, и они работают просто отлично. Я не смог ничего найти через поиск здесь.
Теперь я программирую на C около 6 месяцев, поэтому я определенно начинающий. Я становлюсь немного опытным, но есть так много всего, что я могу выучить, и так много, чего я не знаю о языке.
Предупреждения, которые я получаю:
warning: format '%s' expects argument of type 'char *', but argument 2 has type 'char * (*)[20]' [-Wformat=]|
для обоих пропущенных полей. Это потому, что массивы являются технически указателями? Я попытался изменить несколько вещей вокруг, но, как я сказал, моя структура книг использует ту же логику, что и у студентов, и у меня есть функция add_books, которая более или менее такая же, как и у студентов, которая работает без каких-либо сбоев.
Любая помощь будет принята с благодарностью, и, надеюсь, этот вопрос может помочь другим в будущем. Спасибо, ребята и девочки.
отредактировано для добавления функции student_confirm ():
int student_confirm(){ //Function to confirm adding of student
int x = 10;
char answer;
system("cls");window();
printf("\n\n\n");
gotoxy(x,5);printf("Confirm you would like to add a new student: (Y/N)");
if(getch() == 'y' || answer == 'Y')
student_data(answer);
return 1;
}