Какие указать параметры при обращении к функции? - C (СИ)
Формулировка задачи:
Подскажите пожалуйста какие следует указать параметры при обращении к функции RedaktInfo() или, может, в самой функции я формальные параметры неверно указала?
структура:
Сама функция:
[/C]
Обращение к функции
Спасибо!
struct Spisok { char FIO[20]; char number[5]; float ball; int dohod; } pSTUDENT;
void RedaktInfo(Spisok *pSTUDENT) { goto redact; char StudFaind[20];//студент, данные которого нужно изменить Stud=fopen("d:\\Stud.txt","a"); printf("Bведите ФИО студента для редактирования: "); scanf("%s", StudFaind); for (int i=0; i<q; i++) { fscanf(Stud, "%s %s %f %d" , pSTUDENT->FIO, pSTUDENT->number, &pSTUDENT->ball, &pSTUDENT->dohod); printf("%s %s %f %d" , pSTUDENT->FIO, pSTUDENT->number, pSTUDENT->ball, pSTUDENT->dohod); if (strcmp(pSTUDENT->FIO, StudFaind)==0) { redact: printf("Какие данные студента %s следует изменить?\n 1-ФИО;\n 2-номер группы;\n 3-средний балл;\n 4-доход на одного члена семьи.\n", StudFaind); int e;//для выбора информации, которую следует изменить scanf("%d", &e); switch (e) { case 1: printf("Введите новые данные(ФИО): "); scanf("%s", pSTUDENT->FIO);//или создаать новую структуру X, а потом присв-ть break; case 2: printf("Введите новые данные(номер группы): "); scanf("%s", pSTUDENT->number); break; case 3: printf("Введите новые данные(средний балл): "); scanf("%f", &pSTUDENT->ball); break; case 4: printf("Введите новые данные(доход на одного члена семьи): "); scanf("%d", &pSTUDENT->dohod); break; default: printf( "Неверный ввод.\n" ); } printf( "\nПродолжить редактирование данных данного студента? 1-да, 2-нет\n " ); int a; scanf( "%d", &a ); switch ( a ) { case 1: goto redact;//продолжаем редактировать данные студента break; case 2: printf("Данные были изменены!"); break; default: printf( "Неверный ввод.\n" ); } } break;//досрочно выходим из цикла сверки фамилий } if (i=q) { printf("Студент %s в списке не найден.", StudFaind); } else { for (i=0; i<q; i++) { fprintf(Stud, "%s %s %f %d" , pSTUDENT->FIO, pSTUDENT->number, pSTUDENT->ball, pSTUDENT->dohod); } } fclose(Stud); }
printf( "8.Выход в меню 1-го уровня;\n" ); printf( "Ваш выбор: " ); int c; scanf( "%d", &c ); switch ( c ) { case 1: FileOpen();// 1.Создание/открытие файла с данными;-параметры- break; case 2: AddInfo();// 2.Добавление записи; break; case 3: RedaktInfo();// 3.Редактирование записи; ??????????????????? break;
Решение задачи: «Какие указать параметры при обращении к функции?»
textual
Листинг программы
void AdminMenu (struct Spisok *pSTU) { char StudFaind[20];//студент, данные которого нужно изменить struct Spisok STU; Stud=fopen("d:\\Stud.txt","r+"); q=4; printf("Bведите ФИО студента для редактирования: "); scanf("%s", StudFaind); for (i=0; i<q; i++) { Spisok *pSTU=(Spisok*)malloc(sizeof(Spisok));//выделяем память под список студентов fscanf(Stud," %s %s %f %d" , pSTU->FIO, pSTU->number, &pSTU->ball, &pSTU->dohod); if (strcmp(pSTU->FIO, StudFaind)==0) { redact: printf("Какие данные студента %s следует изменить?\n 1-ФИО;\n 2-номер группы;\n 3-средний балл;\n 4-доход на одного члена семьи.\n", StudFaind); int e;//для выбора информации, которую следует изменить scanf("%d", &e); switch (e) { case 1: printf("Введите новые данные(ФИО): "); scanf("%s", pSTU->FIO);//или созд break; case 2: printf("Введите новые данные(номер группы): "); scanf("%s", pSTU->number); break; case 3: printf("Введите новые данные(средний балл): "); scanf("%f", &pSTU->ball); break; case 4: printf("Введите новые данные(доход на одного члена семьи): "); scanf("%d", &pSTU->dohod); break; default: printf( "Неверный ввод.\n" ); } printf( "\nПродолжить редактирование данных данного студента? 1-да, 2-нет\n " ); int a; scanf( "%d", &a ); switch ( a ) { case 1: goto redact;//продолжаем редактировать данные студента break; case 2: printf("Данные успешно изменены!"); goto vixod; break; default: printf( "Неверный ввод.\n" ); } } } vixod: if (i<q) { for (i=0; i<q; i++) {//В этом месте перестает работать, как иначе перезаписать данные в файл? fprintf(Stud,"%s %s %f %d" , pSTU->FIO, pSTU->number, pSTU->ball, pSTU->dohod); } } else { printf("Студент %s в списке не найден.", StudFaind); } fclose(Stud); }
Объяснение кода листинга программы
- В функции объявлен массив
StudFaind
для хранения ФИО студента, который нужно изменить, и переменнаяq
для количества студентов в списке. - Функция считывает данные из файла
Stud.txt
в структуруSpisok
через указательpSTU
. - Переменная
i
используется как счетчик в цикле для обхода всех записей в списке. - Если ФИО текущего студента совпадает с ФИО студента, данные которого нужно изменить, то начинается процесс редактирования.
- Пользователю предлагается выбрать, какие данные следует изменить, и вводится соответствующий номер.
- В зависимости от выбранного номера, пользователю предлагается ввести новые данные для соответствующего поля.
- Если пользователь решил продолжить редактирование, то происходит возврат к шагу 4.
- Если пользователь решил сохранить изменения, то данные студента записываются обратно в файл
Stud.txt
. - Если студент с указанным ФИО не найден в списке, то выводится сообщение об ошибке.
- Функция закрывает файл
Stud
перед выходом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д