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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
AgentumA
2 / 1 / 0
Регистрация: 05.05.2010
Сообщений: 75
#1

структуры-список - C++

13.05.2010, 21:23. Просмотров 521. Ответов 7
Метки нет (Все метки)

ребят,найдите у меня ошибку...приблизительно в части,выделенной error.
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
#include "stdafx.h"
#include"fstream"
#include"iostream"
#include"string"
#include"iomanip"
#include "conio.h"
#include <stdio.h>
 
using namespace std;
//открываем глобальные файловые потоки 
 
ifstream in("input.txt");
ofstream out("output.txt");
struct mas
{
    string F,I,O; //фамилия,имя, отчество
    int ses[3];//оценки по 3 предмета
    mas() { ses[0] = 0; ses[1] = 0; ses[2] = 0;}
    void print();
};
void mas::print()//вывод данных в выходной поток
{
    out<<setw(12)<<left<<F<<setw(10)<<I<<setw(10)<<O;
    for(int i=0; i<3;i++)
        out<<setw(12)<<ses[i];
    out<<endl;
 
}
 
int main()
{
    int n=0;
    mas stud[20];
    if(!in)cout<<"error in the open file input.txt\n";
    else
    {
        while(in.peek()!=EOF)//считываем данные про всех студентов
    
        {
            in>>stud[n].F;
            in>>stud[n].I;
            in>>stud[n].O;
            in>>stud[n].ses[0];
            in>>stud[n].ses[1];
            in>>stud[n].ses[2];
            stud[n].print();
            n++;
        }
            
            if(in)
            {printf("%5s %5s %5s %3d %3d %3d\n","fam","name","otch","1","2","3");
            for (int i=0;i<n;i++)
            {printf("%5s",stud[i].F);
             printf("%5s",stud[i].I);
             printf("%5s",stud[i].O);
             printf("%5d",stud[i].ses[0]);
             printf("%5d",stud[i].ses[1]);
             printf("%5d\n",stud[i].ses[2]);};
             //getchar();
//error
            {int j=0;
            if(stud[n].ses[0]<3 || stud[n].ses[1]<3 || stud[n].ses[2]<3)
            for (j=1;j<n-1;j++) stud[j]=stud[j+1];
            n-;
            stud[j].print();
            }
            }
    }
//error
    in.close(); out.close();//закрываем файлы
    getch();
    return 0;
}
задание такое:составить список студентов Ф.И.О и резы экзаменов(трех) и удалить записи студентов,не сдавших сессии.
а,и еще...не выводит на экран почему то список...
в прикрепленном файле входной файл.
Вложения
Тип файла: txt input.txt (37 байт, 20 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2010, 21:23     структуры-список
Посмотрите здесь:

Список заданой структуры - C++
Помогите доделать задание пожалуйста, условие такое: ''Сформировать документ, в котором хранится информация по ассортименту...

Структуры данных. Список - C++
В общем есть у меня структура рейсов, она должна содержать список пассажиров. Как реализовать понять не могу. Хотел в структуру список...

Структуры.Вывести список - C++
Здраствуйте. Помогите,пожалуйста,с програмой, немного не понимаю как сделать В отделе кадров хранится список преподавателей...

Список студентов (структуры) - C++
Вводится список студентов (Ф.И.О., номер группы, оценка). Найти номер группы, в которой у всех студентов вместе наибольший средний балл.

создаю список для структуры - C++
Дана структура,которая вводится с клавы!вот,ввели информацию,нужно создать список,я создал,и чтобы в этот список записывалась информация о...

Создание структуры Список студентов - C++
Нужна помощь. Есть в методичке пример создания Ведомости студентов. Код: #include &lt;iostream.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; ...

Структуры. Список товаров, имеющихся на складе - C++
Список товаров, имеющихся на складе, включает в себя наименование товара, количество единиц товара, цену единицы и дату поступления товара...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,276
13.05.2010, 21:42     структуры-список #2
в 65 строке "n-" что значит?
AgentumA
2 / 1 / 0
Регистрация: 05.05.2010
Сообщений: 75
13.05.2010, 22:15  [ТС]     структуры-список #3
Цитата Сообщение от Vorona Посмотреть сообщение
в 65 строке "n-" что значит?
n-- надо...исправил....НО всё равно не выводит список на экран и не удаляет запись с плохими оценками

Добавлено через 12 минут
вот еще исправил,но всё равно...
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
#include "stdafx.h"
#include"fstream"
#include"iostream"
#include"string"
#include"iomanip"
#include "conio.h"
#include <stdio.h>
 
using namespace std;
//открываем глобальные файловые потоки 
 
ifstream in("input.txt");
ofstream out("output.txt");
struct mas
{
    string F,I,O; //фамилия,имя, отчество
    int ses[3];//оценки по 3 предмета
    mas() { ses[0] = 0; ses[1] = 0; ses[2] = 0;}
    void print();
};
void mas::print()//вывод данных в выходной поток
{
    out<<setw(12)<<left<<F<<setw(10)<<I<<setw(10)<<O;
    for(int i=0; i<3;i++)
        out<<setw(12)<<ses[i];
    out<<endl;
 
}
 
int main()
{
    int n=0;
    mas stud[20];
    char mm[]="1";
    if(!in)cout<<"error in the open file input.txt\n";
    else
    {
        while(in.peek()!=EOF)//считываем данные про всех студентов
    
        {
            in>>stud[n].F;
            in>>stud[n].I;
            in>>stud[n].O;
            in>>stud[n].ses[0];
            in>>stud[n].ses[1];
            in>>stud[n].ses[2];
            //stud[n].print();
            n++;
        }
            
            if(in)
            {printf("%5s %5s %5s %3s %3s %3s\n","fam","name","otch","1","2","3");
            for (int i=0;i<n;i++)
            {printf("%5s",stud[i].F);
             printf("%5s",stud[i].I);
             printf("%5s",stud[i].O);
             printf("%5d",stud[i].ses[0]);
             printf("%5d",stud[i].ses[1]);
             printf("%5d\n",stud[i].ses[2]);};
             getchar();
            {int j=0;
            for (int i=0;i<n && j;i++)
            if(stud[i].ses[0]<3 || stud[i].ses[1]<3 || stud[i].ses[2]<3)
            for (j=1;j<n-1;j++) stud[j]=stud[j+1];
            n--;
            stud[j].print();
            }
            }
    }
    in.close(); out.close();//закрываем файлы
    getch();
    return 0;
}
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,276
13.05.2010, 22:22     структуры-список #4
точно не уверен, но попробуйте в 64 строке
C++
1
for(j = i; j < n; j++)
AgentumA
2 / 1 / 0
Регистрация: 05.05.2010
Сообщений: 75
13.05.2010, 22:25  [ТС]     структуры-список #5
Цитата Сообщение от Vorona Посмотреть сообщение
точно не уверен, но попробуйте в 64 строке
C++
1
for(j = i; j < n; j++)
неа...
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,276
13.05.2010, 22:29     структуры-список #6
да, прошу прощения, вот алгоритм удаления элементов массива (сдвига следующего элемента на удаляемый)
C++
1
2
3
4
5
6
7
8
for (i = 0; i < n; i++){
      if(stud[i].ses[0]<3 || stud[i].ses[1]<3 || stud[i].ses[2]<3){
            for (j = i; j < n-1; j++) 
                  stud[j] = stud[j+1];
            n--;
      }
/*.......*/
}
если не выйдет, значит ошибка в другом месте, и, кстати, зачем вам скобки в 61 и 67 строках?
AgentumA
2 / 1 / 0
Регистрация: 05.05.2010
Сообщений: 75
13.05.2010, 22:48  [ТС]     структуры-список #7
еще вариант...
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
#include "stdafx.h"
#include"fstream"
#include"iostream"
#include"string"
#include"iomanip"
#include "conio.h"
#include <stdio.h>
 
using namespace std;
//открываем глобальные файловые потоки 
 
ifstream in("input.txt");
ofstream out("output.txt");
struct mas
{
    string F,I,O; //фамилия,имя, отчество
    int ses[3];//оценки по 3 предмета
    mas() { ses[0] = 0; ses[1] = 0; ses[2] = 0;}
    void print();
};
void mas::print()//вывод данных в выходной поток
{
    out<<setw(5)<<left<<F<<setw(5)<<I<<setw(5)<<O;
    for(int i=0; i<3;i++)
        out<<setw(5)<<ses[i];
    out<<endl;
 
}
 
int main()
{
    int n=0;
    mas stud[20];
    if(!in)cout<<"error in the open file input.txt\n";
    else
    {
        while(in.peek()!=EOF)//считываем данные про всех студентов
    
        {
            in>>stud[n].F;
            in>>stud[n].I;
            in>>stud[n].O;
            in>>stud[n].ses[0];
            in>>stud[n].ses[1];
            in>>stud[n].ses[2];
            //stud[n].print();
            n++;
        }
            
            //if(in)
            {printf("%5s %5s %5s %5s %4s %4s\n","fam","name","otch","1","2","3");
            for (int i=0;i<n;i++)
            {printf("%5s",stud[i].F);
             printf("%5s",stud[i].I);
             printf("%5s",stud[i].O);
             printf("%5d",stud[i].ses[0]);
             printf("%5d",stud[i].ses[1]);
             printf("%5d\n",stud[i].ses[2]);};
            {int j=0;
            for (int i=0;i<n && j;i++)
            if(stud[i].ses[0]<3 || stud[i].ses[1]<3 || stud[i].ses[2]<3)
            for (j=1;j<n-1;j++) stud[j]=stud[j+1];
            n--;
            stud[j].print();
            }
            }
    }
    in.close(); out.close();//закрываем файлы
    getch();
    return 0;
}
теперь выводит...ток вместо фио null и при записи в файл записывается только первая запись

Добавлено через 17 минут
мой последний вариант...
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
#include "stdafx.h"
#include"fstream"
#include"iostream"
#include"string"
#include"iomanip"
#include "conio.h"
#include <stdio.h>
 
using namespace std;
//открываем глобальные файловые потоки 
 
ifstream in("input.txt");
ofstream out("output.txt");
struct mas
{
    string F,I,O; //фамилия,имя, отчество
    int ses[3];//оценки по 3 предмета
    mas() { ses[0] = 0; ses[1] = 0; ses[2] = 0;}
    void print();
};
void mas::print()//вывод данных в выходной поток
{
    out<<setw(5)<<left<<F<<setw(5)<<I<<setw(5)<<O;
    for(int i=0; i<3;i++)
        out<<setw(5)<<ses[i];
    out<<endl;
 
}
 
int main()
{
    int n=0;
    mas stud[20];
    if(!in)cout<<"error in the open file input.txt\n";
    else
    {
        while(in.peek()!=EOF)//считываем данные про всех студентов
    
        {
            in>>stud[n].F;
            in>>stud[n].I;
            in>>stud[n].O;
            in>>stud[n].ses[0];
            in>>stud[n].ses[1];
            in>>stud[n].ses[2];
            //stud[n].print();
            n++;
        }
            
            //if(in)
            {printf("%5s %5s %5s %5s %4s %4s\n","fam","name","otch","1","2","3");
            for (int i=0;i<n;i++)
            {printf("%5s",stud[i].F);
             printf("%5s",stud[i].I);
             printf("%5s",stud[i].O);
             printf("%5d",stud[i].ses[0]);
             printf("%5d",stud[i].ses[1]);
             printf("%5d\n",stud[i].ses[2]);};
            {int j=0;
            for (int i=0;i<n && j;i++)
            if(stud[i].ses[0]<3 || stud[i].ses[1]<3 || stud[i].ses[2]<3)
            for (j=i;j<n-1;j++) stud[j]=stud[j+1];
            n--;}
            for (int i=0;i<n;i++)
            {out<<stud[i].F<<" "<<stud[i].I<<" "<<stud[i].O<<" ";
            out<<stud[i].ses[0]<<" "<<stud[i].ses[1]<<" "<<stud[i
            ].ses[2]<<endl;}
    
            }
    }
    in.close(); out.close();//закрываем файлы
    getch();
    return 0;
}
выводит на экран вместо фио нуллы и не удаляет двоечников...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.05.2010, 00:02     структуры-список
Еще ссылки по теме:

список (в программе обнуляются указатели на структуры) - C++
здравствуйте помогите найти ошибку, при возврате указателя на структуру из функции в функцию майн он обнуляется, это меня сбивает с толку...

Реализовать структуры данных «линейный список» - C++
Ребят помогите написать прогу! задание тут: http://ifolder.ru/29432716 ( извините что так, но там в задании формула есть) ...

Структуры: создать список жителей города - C++
нужно создать список жителей города, работа со структурой. struct sp { char fami; // фамилия ...

Реализовать структуры данных «циклический список» - C++
Вечер добрый, помогите выполнить задание: Реализовать структуры данных «циклический список». Дано натуральное число n и целые числа a1,...

Двусвязный список. Класс с элементом в виде структуры - C++
Вот мой код, обычный список - элементы действительные числа, выводит последовательность х1, х2...х(n) Нужно построить лист2 в котором...


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

Или воспользуйтесь поиском по форуму:
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,276
14.05.2010, 00:02     структуры-список #8
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
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <string>
#include <iomanip>
//#include <conio.h>
//#include <stdio.h>
 
using namespace std;
//открываем глобальные файловые потоки 
 
ifstream in("input.txt");
ofstream out("output.txt");
 
struct mas
{
    string F, I, O; //фамилия,имя, отчество
    int ses[3];//оценки по 3 предметам
    //mas() { ses[0] = 0; ses[1] = 0; ses[2] = 0;}
    void print();
    void show_student();
};
 
void mas::print()//вывод данных в выходной поток
{
    out << setw(12) << left << F << setw(10) << I << setw(10) << O;
    for(int i = 0; i < 3; i++)   
    out << setw(12) << ses[i];
    out << endl;
}
 
void mas::show_student(){
    
    cout << F << '\t';
    cout << I << '\t';
    cout << O << '\t';
    for(int i = 0; i < 3; i++)
        printf("%d\t", ses[i]);
    printf("\n");
}
 
int main()
{
    int n = 0, i, j;
    mas stud[20];
    if(!in){
        cout<<"error in the open file input.txt\n";
        return 1;
    }
    else
    {   i = 0;
        while(!in.eof())//считываем данные про всех студентов        
        {
            in >> stud[n].F;
            in >> stud[n].I;
            in >> stud[n].O;
            in >> stud[n].ses[0];
            in >> stud[n].ses[1];
            in >> stud[n].ses[2];
            n++;
        }                
        printf("%s\t%s\t%s\t%s\t%s\t%s\n","fam","name","otch","1","2","3");
        printf("All Students:\n");
        for (i = 0; i < n; i++)
            stud[i].show_student();
        for (i = 0; i < n; i++){
            if(stud[i].ses[0]<3 || stud[i].ses[1]<3 || stud[i].ses[2]<3){
                for (j = i; j < n-1; j++) 
                    stud[j] = stud[j+1];
                n--;
            }
            stud[i].print();
        }
        printf("Only Good Students:\n");
        for (int i = 0; i < n; i++)
            stud[i].show_student();
    }
    in.close(); 
    out.close();//закрываем файлы
    //getch();
    system("pause");
    return 0;
}
советую вам пользоваться либо оператором cout<<, либо ф-цией printf(), не стоит все вместе использовать, вот %s, к примеру не выводил переменные типа string на экран, из-за этого пришлось использовать cout<<, а так все работает
Yandex
Объявления
14.05.2010, 00:02     структуры-список
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru