Какие указать параметры при обращении к функции? - 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перед выходом.