Форум программистов, компьютерный форум CyberForum.ru

Структуры: Списки студентов - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 42, средняя оценка - 4.81
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
26.03.2011, 21:23     Структуры: Списки студентов #1
всем привет
вот такое задание мне дано:
Описать массив структур, содержащих информацию о результатах сессии: {фамилия; группа; дисциплина; оценка}. Распечатать фамилии студентов, не имеющих оценок ниже «хорошо».

делаю на Borland c++ 3.1 т.к. его пока изучаем
вот мой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define cherta printf("-----------------------------------------------------------------\n")
 
 
struct card
       { struct card *list;
    char *f_name;
    char *group;
    char *dp;
    char *rating;
       }*list;
 
void main()
{clrscr();     struct card **list;
int i=1, N=1;
do{
   for(; i<=N; i++)
   {
    cherta;
    printf("Number karti: %d\n", i);
    printf("Firstname: ");
    gets(list[i]->f_name);
    printf("Number Group: ");
    gets(list[i]->group);
    printf("Dicsipline: ");
    gets(list[i]->dp);
    printf("Rating: ");
    gets(list[i]->rating);
    cherta;
    printf("Nazhmite ENTER esli hotite prodolzhit spisok ili ESC dlya vihoda\n");
    if(getch()==13) N++;
   }
  }while(getch()!=27);
 
  clrscr();
  printf("Spisok studentov u kotorih ocenki 'horosho' i 'otlocno':\n");
 for(i=1; i<=N; i++)
 {
  if(list[i]->rating=="horosho" && list[i]->rating=="otlochno" && list[i]->rating=="4" && list[i]->rating=="5")
   {
    printf("Firstname: %s", list[i]->f_name);
    printf("Number Group: %s", list[i]->group);
    printf("Dicsipline: %s", list[i]->dp);
    printf("Rating: %s", list[i]->rating);
    cherta;
   }
 }
 getch();
}
пояснте, что не так? почему он не хочет сравнивать? и что не так в моем коде?
жду советов, поравки и замечаний, хочу понять и научиться..
заранее спасибо
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
29.03.2011, 16:49  [ТС]     Структуры: Списки студентов #41
Цитата Сообщение от Deviaphan Посмотреть сообщение
Внимательно-внимательно посмотри на строку 52. И учти, что имена переменных ничего не значат. Две переменных с одинаковым именем, но в разных областях видимости - это РАЗНЫЕ переменные.
Поэтому посмотри код внимательнее.
В функцию Принт передаются не инициализированные переменные, соответственно печатается мусор.

Ладно, сжалюсь: в строке 111 должно быть
list = CREATE_LIST();

Но код я не смотрел, могут и ещё ошибки быть.
спасибо но проблема возникает на этапе когда используется функция CREATE_LIST_SES
т.е. муссор появляется именно когда неск раз используешь эту функцию или когда создаешь имя след студента скажем так и снова вызыв эту функц неск раз он печатает вместо Rating пишет Rat4 или что то рода этого как быть тут то?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.03.2011, 17:08     Структуры: Списки студентов #42
Цитата Сообщение от eddilou Посмотреть сообщение
но проблема возникает на этапе когда используется функция CREATE_LIST_SES
Проблема абсолютно та же. Объект создаётся, инициализируется и, передаваясь из функции, оказывается в небытие и утекает с собой столь ценную память.
Как это исправить, Ваше домашнее задание.)
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
29.03.2011, 19:18  [ТС]     Структуры: Списки студентов #43
Цитата Сообщение от Deviaphan Посмотреть сообщение
Проблема абсолютно та же. Объект создаётся, инициализируется и, передаваясь из функции, оказывается в небытие и утекает с собой столь ценную память.
Как это исправить, Ваше домашнее задание.)
уже сижу 2 часа
эх.. я все перепробовал, и выделения больше места он фурычит норм а потом через неск циклов использования опять те же каракули пишет, и делал присвоение SES=CREATE_LIST_SES, одно и то же.... что то не понимаю что не так....
как освобождать с помощью delete так и не понял писал как вы писали ошибки выдает
все работает норм за исключением печатания каракуль точнее просто сбивается printf("rating: ")
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.03.2011, 19:31     Структуры: Списки студентов #44
Ну так приведи окончательный код, чтобы ошибки в нём указать, мне же не видно.)
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
29.03.2011, 19:42  [ТС]     Структуры: Списки студентов #45
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define cherta printf("-----------------------------------------------------------------\n")
 
/************************************************************************
              STRUCTURS
***********************************************************************/
struct card
       {
    int N;
    char surname[50];
    char group[20];
    struct session *SES;
       };
 
struct session
       {
    int PR;
    char dp[50];
    char rating[20];
       };
/*************************************************************************
               FUNCIONS
**************************************************************************/
 
 
struct session *CREATE_LIST_SES(card *list, int i)
{   session *SES= new session[100];
int j=1;
 list[0].SES[0].PR=1;
  for(; j<=list[0].SES[0].PR; j++)
    {
    SES=(session*)malloc(sizeof(SES));
     printf("Dicsipline: ");
     scanf("%s",&list[i].SES[j].dp);
     printf("Rating: ");
     scanf("%s",&list[i].SES[j].rating);
     if(getch()==13) list[0].SES[0].PR++;
    }
 return SES;
}
 
 
 
struct card *CREATE_LIST()
{ card *list= new card[100] ;
 int i=1;      session* SES;
 list[0].N=1;
    for(; i<=list[0].N; i++)
    {
     cherta;
     printf("Surname: ");
     scanf("%s",&list[i].surname);
     printf("Number Group: ");
     scanf("%s",&list[i].group);
     SES=CREATE_LIST_SES(list, i);
     cherta;
     printf("Nazhmite ENTER esli hotite prodolzhit spisok ili ESC dlya vihoda\n");
     if(getch()==13) list[0].N++;
    }
 return list;
}
 
int CONTROL(card *list, int i)
{int x, x1=1, x2=1;
 for(int j=1; j<=list[0].SES[0].PR; j++)
  {
   char *ocenka[]={"horosho", "otlichno", "4", "5"};
   if(strcmp(list[i].SES[j].rating,ocenka[0])==0
      || strcmp(list[i].SES[j].rating,ocenka[1])==0
      || strcmp(list[i].SES[j].rating,ocenka[2])==0
      || strcmp(list[i].SES[j].rating,ocenka[3])==0) x1=1;
      else x2=0;
      x=x1*x2;
  }
 return x;
}
 
 
void PRINT_LIST(card *list, session *SES)
{
 for(int i=1; i<=(list[0].N); i++)
  {
   if(CONTROL(list,i)==list[0].SES[0].PR)
    {
     printf("Surname: %s\n", list[i].surname);
    }
  }
}
/***************************************************************************
               PROGRAMMA
****************************************************************************/
void main()
{ card *list; session *SES;
do
 {
  free(list->SES); free(list); // попытка неудачна и смешная наверно, проверено не фурычит и 0 реакции
  clrscr();
  printf("Vvedite spisok studentov:\n");
  list=CREATE_LIST();
  clrscr();
  printf("Spisok studentov y kotorix ocenki ne nizhe 'horosho':\n");
  cherta;
  PRINT_LIST(list, SES);
  printf("\nVvesti spisok snova? yes/no (AnyKey/ESC)");/// delete[]=card *list; delete[]=session *SES;
 }while(getch()!=27);
}
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.03.2011, 20:06     Структуры: Списки студентов #46
Строка 36 это вообще что?

Добавлено через 52 секунды
Я же уже сказал, забей на malloc. Поди ещё и delete[] вызывал для того, что malloc-ом выделял?

Добавлено через 36 секунд
Слово struct при объявлении переменной не нужно.

Добавлено через 5 минут
51,52 - цикл выполняется только одну итерацию.

Добавлено через 58 секунд
Или нет.)
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
29.03.2011, 20:07  [ТС]     Структуры: Списки студентов #47
36 строк бред я ее забыл стереть и компилятор на нее не реагирует воть
насчет насчет делите я писал и как говорили delite[]=card компилятор ругается
насчет struct, о какой именно говорите, если о том где я пишу на 11 и 19 строчке то без них никак, а больше и нету поясните пож-та
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
29.03.2011, 20:11     Структуры: Списки студентов #48
ОТКУДА ты взял "delete[]=card"? Я же русским по белому написал "delete[] list;"!

Добавлено через 50 секунд
Цитата Сообщение от eddilou Посмотреть сообщение
насчет struct
Строка 16, 30, 48

Добавлено через 52 секунды
Цикл 52 лучше через while сделать. Слишком сложное условие, чтобы for использовать.
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
29.03.2011, 20:23  [ТС]     Структуры: Списки студентов #49
а как тогда буду наращивать i?? если через whaile
по-моему for тут проще некуда дабы наращиваем нажимая энтер если же не энтер то фор проверяет условия и выходит
насчет 16 строки, убрав структ компил ругается так что там без этого никак
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
30.03.2011, 06:03     Структуры: Списки студентов #50
У тебя слишком сложная логика для for. Именно с человеческой точки зрения. Т.е. всё управление циклом должно быть в его шапке, а у тебя не так. Это слишком сложно для for, лучше while. А наращивать i точно так же.) ++i.)
Цитата Сообщение от eddilou Посмотреть сообщение
убрав структ компил ругается
Он же допотопный, да ещё и Борланд...
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
30.03.2011, 18:04  [ТС]     Структуры: Списки студентов #51
Цитата Сообщение от Deviaphan Посмотреть сообщение
У тебя слишком сложная логика для for. Именно с человеческой точки зрения. Т.е. всё управление циклом должно быть в его шапке, а у тебя не так. Это слишком сложно для for, лучше while. А наращивать i точно так же.) ++i.)

Он же допотопный, да ещё и Борланд...
ну как я понимаю так да?
while(getch()!=27){}
или черехз do while можно
но суть не в этом ниче не измениться
проблема в том что не та к фурычит немного в чем проблема так и не понимаю
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
31.03.2011, 19:55  [ТС]     Структуры: Списки студентов #52
Deviaphan, что посоветуешь то насчет загрязнения printf??
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
31.03.2011, 20:08     Структуры: Списки студентов #53
printf не пользуюсь.)
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
31.03.2011, 21:34  [ТС]     Структуры: Списки студентов #54
а чем пользуешься или как переделать чтоб все ок было???
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
01.04.2011, 06:56     Структуры: Списки студентов #55
cin, cout
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
01.04.2011, 16:25  [ТС]     Структуры: Списки студентов #56
Цитата Сообщение от Deviaphan Посмотреть сообщение
cin, cout
и не ожете дать урок по использованию этой конструкции cin - cout чем лучше они от printf-scanf?
cin count - библиотека iostream.h?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
01.04.2011, 17:00     Структуры: Списки студентов #57
Урок.)
C++
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
 
void main()
{
    int a(0);
    cin >> a;
    cout << a;
}
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
01.04.2011, 18:14  [ТС]     Структуры: Списки студентов #58
Deviaphan, попробовал то что предложили, результат тот же самый
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
01.04.2011, 19:03     Структуры: Списки студентов #59
Цитата Сообщение от eddilou Посмотреть сообщение
что посоветуешь то насчет загрязнения printf
Я вообще не понял, о чём речь.)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.04.2011, 19:16     Структуры: Списки студентов
Еще ссылки по теме:

C++ Создание структуры Список студентов
Перевести L студентов с 1-й группы в другую (списки) C++
C++ Список студентов (структуры)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
eddilou
3 / 3 / 0
Регистрация: 21.11.2010
Сообщений: 194
01.04.2011, 19:16  [ТС]     Структуры: Списки студентов #60
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я вообще не понял, о чём речь.)
речь о том, почему загрязняется принтф "ратинг"
Yandex
Объявления
01.04.2011, 19:16     Структуры: Списки студентов
Ответ Создать тему
Опции темы

Текущее время: 15:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru