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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2016, 14:04   #1
Max00766
Форумчанин
 
Регистрация: 15.11.2015
Сообщений: 151
По умолчанию Списки в Си, не принимает тип списка

Задание такое:
Создать список студентов, указав: фамилия, имя, отчество студента, группу, оценки по 5 предметам: выш. мат, физика, техника, программирование и статистика. Напечатать фамилия студентов группы 1ПР.
Я создал список, заполнил его, но при компиляции выбивает ошибка на имени списка, неизвестный тип, как исправить? Буду безумно благодарен:
1.jpg
Код:
Код:
#include <stdio.h>
#include <stdlib.h>

struct Student{
    char *name;
    char *group;
    int scoreMath;
    int scorePhysic;
    int scoreTech;
    int scoreProgramm;
    int scoreStatistic;
};

int main()
{
    Student bol;
    bol.name = "Болгар Максим Сергеевич";
    bol.group = "1ПР";
    bol.scoreMath = 4;
    bol.scorePhysic = 3;
    bol.scoreTech = 5;
    bol.scoreProgramm = 5;
    bol.scoreStatistic = 5;

    Student mot;
    mot.name = "Мотуз Дмитрий Александрович";
    mot.group = "1ПР";
    mot.scoreMath = 5;
    mot.scorePhysic = 4;
    mot.scoreTech = 3;
    mot.scoreProgramm = 3;
    mot.scoreStatistic = 5;

    Student gen;
    gen.name = "Генс Алексей Сергеевич";
    gen.group = "1ПР";
    gen.scoreMath = 3;
    gen.scorePhysic = 3;
    gen.scoreTech = 3;
    gen.scoreProgramm = 3;
    gen.scoreStatistic = 3;

    Student rub;
    rub.name = "Рыбась Денис Батькович";
    rub.group = "1ПР";
    rub.scoreMath = 5;
    rub.scorePhysic = 5;
    rub.scoreTech = 5;
    rub.scoreProgramm = 5;
    rub.scoreStatistic = 5;

    printf("%s\n",bol.name);
    printf("%s\n",mot.name);
    printf("%s\n",gen.name);
    printf("%s\n",rub.name);
}
Max00766 вне форума Ответить с цитированием
Старый 22.04.2016, 14:14   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Код:
struct Student bol;
и так с чар-строками не работают - выделяйте память и копируйте.
p51x вне форума Ответить с цитированием
Старый 22.04.2016, 14:26   #3
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Ну или, например,
Код:
typedef struct Student_tag{
//...
} Student;
Croessmah вне форума Ответить с цитированием
Старый 22.04.2016, 14:34   #4
Max00766
Форумчанин
 
Регистрация: 15.11.2015
Сообщений: 151
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Код:
struct Student bol;
и так с чар-строками не работают - выделяйте память и копируйте.
То-есть для каждого студента писать отдельную структуру?
Max00766 вне форума Ответить с цитированием
Старый 22.04.2016, 14:37   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Нет. У вас тип называется "struct Student" (это как int). Вы так его объявили.
p51x вне форума Ответить с цитированием
Старый 22.04.2016, 14:38   #6
Max00766
Форумчанин
 
Регистрация: 15.11.2015
Сообщений: 151
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Ну или, например,
Код:
typedef struct Student_tag{
//...
} Student;
Спасибо большое, а как добавить проверку что-бы студенты чьи имена выводятся были именно с группы 1ПР? Что бы проверяло группы у всех студентов и выводило их имена

Последний раз редактировалось Max00766; 22.04.2016 в 14:46.
Max00766 вне форума Ответить с цитированием
Старый 22.04.2016, 14:47   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Сравнивать функцией из семейства strcmp и выбирать
p51x вне форума Ответить с цитированием
Старый 22.04.2016, 15:08   #8
Max00766
Форумчанин
 
Регистрация: 15.11.2015
Сообщений: 151
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Сравнивать функцией из семейства strcmp и выбирать
Написал такое:
Код:
    
    if (strcmp(bol.group,mot.group)==0){
     printf("%s\n",bol.name);
     printf("%s\n",mot.name);}
    if (strcmp(gen.group,rub.group)==0){
     printf("%s\n",gen.name);
     printf("%s\n",rub.name);}
Но понимаю что это очень примитивно и если там хотя бы у одного группа будет отличаться, то выведется только 2 списка. Не подскажите как улучшить?
Max00766 вне форума Ответить с цитированием
Старый 22.04.2016, 15:10   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Завести массив студентов, а не отдельно их собирать... и циклы вспомнить.
p51x вне форума Ответить с цитированием
Старый 23.04.2016, 03:34   #10
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Код:
struct Student bol;
и так с чар-строками не работают.
с каких пор? яб только const добавил
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Списки. Вхождение списка в другой LifeWind Помощь студентам 2 16.06.2013 15:21
Списки TList. Инвертирование списка. Человек_Борща Общие вопросы Delphi 3 12.05.2013 06:07
С++ Строки - списки. Удаление элементов списка. Daramos Помощь студентам 0 16.12.2010 09:05
СИ. Списки. Описание структуры односвязного списка Jane-sad Помощь студентам 9 17.05.2010 14:40
Списки. Удаление элемента из списка. thexqn Помощь студентам 0 11.05.2010 09:04