Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2020, 11:07   #11
Алексей1153
фрилансер
Форумчанин
 
Регистрация: 11.10.2019
Сообщений: 947
По умолчанию

Код:
void ChangeStudentName(int n, char name[KOL], struct Student* students, const int students_count)
{
      struct Student* st=0;
      for(st=students; st<students+students_count; st++)
      {
             //st->...
      }
}
Алексей1153 вне форума Ответить с цитированием
Старый 28.05.2020, 12:26   #12
jonikster
Форумчанин
 
Регистрация: 28.10.2014
Сообщений: 216
По умолчанию

Нет, что-то не так.
Введіть команду:
1 - Виведення списку студентів,
2 - Змінити ім'я зазначеного студента,
3 - вихід
2
Введіть номер студента: 7
Введіть нове ім'я студента: Руслан
Введіть команду:
1 - Виведення списку студентів,
2 - Змінити ім'я зазначеного студента,
3 - вихід
1
==========================
Номер Ім’я Вік Рейтинг
==========================
1Костянтин 18 90.00
2Діана 18 64.00
3Дар'я 19 76.00
4Тарас 18 50.00
5Влад 19 94.00
6Ілля 18 70.00
7Олександр 18 80.00
8Антон 19 77.00
9Евген 19 90.00
10Марія 18 60.00
==========================
Введіть команду:
1 - Виведення списку студентів,
2 - Змінити ім'я зазначеного студента,
3 - вихід

Изменения просто не записываются.
Вот полный окончательный код:
[C]#include <stdio.h>
#include <string.h>
#include <windows.h>
#define MAX 10
#define KOL 15

struct Student
{
int id;
char Name[KOL];
int Age;
float AverageRaiting;
struct Student* nextStudent;
};

void InitStudentList(struct Student** student)
{
*student = (struct Student*)
malloc(sizeof(struct Student));
(*student)->id = 1;
printf("Введіть ім’я 1-го студента: ");
scanf("%s", (*student)->Name);
printf("Введіть вік 1-го студента: ");
scanf("%d", &(*student)->Age);
printf("Введіть середній рейтинг 1-го студента: ");
scanf("%f", &(*student)->AverageRaiting);
printf("\n");
(*student)->nextStudent = NULL;
struct Student* endStudent = *student;
for (int i = 2; i <= MAX; i++)
{
endStudent->nextStudent =
(struct Student*) malloc(sizeof(struct Student));
endStudent = endStudent->nextStudent;
endStudent->id = i;
printf("Введіть ім’я %d-го студента: ", i);
scanf("%s", endStudent->Name);
printf("Введіть вік %d-го студента: ", i);
scanf("%d", &endStudent->Age);
printf("Введіть середній рейтинг %d-го студента: ", i);
scanf("%f", &endStudent->AverageRaiting);
printf("\n");
endStudent->nextStudent = NULL;
}
}

void PrintList(struct Student* student)
{
struct Student* printStudent = student;
printf("==========================\ n");
printf("Номер Ім’я Вік Рейтинг \n");
printf("==========================\ n");
while (printStudent)
{
printf("%d", printStudent->id);
printf("%-15s", printStudent->Name);
printf("%4d", printStudent->Age);
printf("%8.2f", printStudent->AverageRaiting);
printf("\n");
printStudent = printStudent->nextStudent;
}
printf("==========================\ n");
}

void FreeList(struct Student** student)
{
if (*student == NULL)
return;
struct Student* tmp = *student;
struct Student* curr_stud;
while (tmp)
{
curr_stud = tmp;
tmp = tmp->nextStudent;
free(curr_stud);
}
*student = NULL;
}

void ChangeStudentName(int n, char name[KOL], struct Student* students)
{
struct Student* st = 0;
int students_count = MAX;
for (st = students; st < students + students_count; st++)
{
if (st->id == n)
{
const int size = sizeof(st->Name);
if (size && size >= sizeof(name))
{
memcpy(st->Name, name, size);
st->Name[size - 1] = '\0';
}
printf("зміни записані");
break;
}
}
}

int main(void)
{
int command;
struct Student* BaseStudent = NULL;
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
InitStudentList(&BaseStudent);
for (;
{
printf("Введіть команду:\n 1 - Виведення списку студентів,\n 2 - Змінити ім'я зазначеного студента,\n 3 - вихід\n");
scanf("%d", &command);
switch (command)
{
case 1:
PrintList(BaseStudent);
break;
case 2:
{
int n;
char name[KOL];
printf("Введіть номер студента: ");
scanf("%d", &n);
printf("Введіть нове ім'я студента: ");
scanf("%s", &name);
ChangeStudentName(n, name, BaseStudent);
break;
}
case 3:
FreeList(&BaseStudent);
return 0;
break;
default:
printf("Помилка вводу...");
FreeList(&BaseStudent);
return 0;
break;
}
}
return 0;
}
[/C]
jonikster вне форума Ответить с цитированием
Старый 28.05.2020, 12:41   #13
jonikster
Форумчанин
 
Регистрация: 28.10.2014
Сообщений: 216
По умолчанию

Даже с strcpy(st->Name,name) не пашет
jonikster вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Линейный односвязный список на Си Enni Помощь студентам 24 28.03.2016 18:11
Односвязный линейный список flecso Паскаль, Turbo Pascal, PascalABC.NET 1 13.05.2012 02:51
С++ линейный односвязный список Lady IcE Помощь студентам 3 25.04.2011 20:24
Линейный-односвязный список Айдар Помощь студентам 1 01.06.2010 10:20
линейный односвязный список на С - что это?? о_О aka_Kiss Помощь студентам 8 22.12.2009 01:39