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

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

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

Ошибка в выводе.(обработка структур из файлов) - C++

10.01.2014, 23:49. Просмотров 194. Ответов 0
Метки нет (Все метки)

Задача следующая:Вывести список студентов студентов ,имеющих неудовлетворительную оценку (меньше 4). Оценка вычисляется из среднего 5 оценок.
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
FILE *file_in;//Указатель на файл ввода
typedef struct
{
char fio[30];
int grade[5];
int YoB,group;
double average_grade;
} TStudent; //TStudent новое имя типа(структуры)
TStudent stud[30]; // Массив структур
char fname[20]; // Имя файла
int num_stuct=0; // Число введенных структур
int menu(); // Меню
void newnamef(); // Ввести имя файла
void newf(); // Создать новый файл
void spisok(); // Ввести список
void openf(); // Открыть файл
void resultcons(); // Вывести результат на экран
void resultfile(); // Вывести результат в файл
int main() //MAIN
{
    setlocale(LC_ALL,"Russian");
    while (true)
    {
        switch(menu()) 
        {
        case 1: newnamef(); break;
        case 2: newf(); break;
        case 3: spisok(); break;
        case 4: openf(); break;
        case 5: resultcons(); break;
        case 6: resultfile(); break;
        case 7: return 0;
        default: "Ошибка выбора(выберите действие от 1 до 7)!";
        }       
        puts("Нажмите любую клавишу ,чтобы продолжить");
        getch(); system("cls"); 
    }
}
    int menu() // Меню
    {   
        cout << "Выберите:" << endl;
        cout << "1. Ввод имени файла" << endl;
        cout << "2. Новый файл" << endl;
        cout << "3. Ввести список" << endl;
        cout << "4. Открыть файл" << endl;
        cout << "5. Вывести результат" << endl;
        cout << "6. Вывести в файл" << endl;
        cout << "7. Выход" << endl;
        int i;
        cin >> i;
        return i;
    }      
    void newnamef() // Ввод имени файла
    {
    cout << "Vvedite file name" << endl;
    cin >> fname;
    }
    void newf() // Создание нового файла
    {
    if((file_in=fopen(fname,"wb"))==NULL)
        {  
        cout << "Ошибка при создании"<<endl;
        exit(1);
        }
    cout << "OK" << endl;
    fclose(file_in);
    }
    void spisok() // Введение списка
    {
        if ((file_in=fopen(fname,"rb+"))==NULL)
        {
        cout << "Ошибка при создании "<<endl;
        exit(1);
        }
    cout << "Введите число студентов " << endl;
    cin >> num_stuct;
    for (int i=0;i<num_stuct;i++)
    {
        cout << "Введите имя: " << endl;
        cin >> stud[i].fio;
        cout << "Введите год рождения: " << endl;
        cin >> stud[i].YoB;
        cout << "Введите номер группы: " << endl;
        cin >> stud[i].group;
            cout << "Введите пять(5) оценок: " << endl;
            stud[i].average_grade=0;
            for(int j=0;j<5;j++)
                {
                cin >> stud[i].grade[j];
                stud[i].average_grade+=stud[i].grade[j]/5;
                }
        fwrite(&stud[i],sizeof(TStudent),1,file_in);
    }
    fclose(file_in);
    }
    void openf()// Открытие файла
    {
            if ((file_in=fopen(fname,"rb"))==NULL)
            {
            cout << "Ошибка при открытии"<<endl;
            exit(1);
            }
        num_stuct=0; TStudent std;
        while(true)
        {
        int nwrt=fread(&std,sizeof(TStudent),1,file_in);
            if(nwrt!=1) break;
        stud[num_stuct]=std;
        cout << stud[num_stuct].fio << " " << stud[num_stuct].grade << endl;
        num_stuct++;
        }
    fclose(file_in);
    }
    void resultcons() // Вывести результат на экран
    {
        for(int i=0;i<num_stuct;i++)
        if(stud[i].average_grade<4)
        cout << stud[i].fio << endl;
    }
    void resultfile() // Вывести результат в файл
    {
    char namet[30];
    FILE *file_out;//Указатель на файл вывода
    cout << "Введите имя файла" << endl;
    cin >> namet;
        if ((file_out=fopen(namet,"w"))==NULL)
        {
        cout << "Ошибка при создании "<<endl;
        exit(1);
        }
    char s[80];
    for (int i=0; i<num_stuct; i++)
        if (stud[i].average_grade<4)
        {
        strcpy(s,stud[i].fio);
        strcat(s,"\n"); // Добавление разделителя строк
                        //(добавляет справа к строке 1 содержимое строки st2)
        fputs(s,file_out);//записывает строку символов в текущую позицию указанного файла
        }
    fclose(file_out);
    }
Вроде всё верно ,а выводит абракадабку вместо нормальных данных,хотя ввод корректный.

Добавлено через 20 минут
Хм...извиняюсь.Работает ,но через раз.Кто-нить просто пробегитесь по моему быдлокоду глазами ,где там ошибки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2014, 23:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка в выводе.(обработка структур из файлов) (C++):

Обработка структур с++ - C++
Помогите мне, пожалуйста. Мне нужно разработать программу обработки структур. В программе использовать структуру, содержащую поля с...

Обработка массива структур - C++
Всем привет. Помогите найти ошибку. Программа должна вывесть имя младшего ребенка если отца зовоут &quot;ivan&quot; Младший ребенок находится тока...

Обработка структур данных - C++
Здравствуйте.никак не могу понять задачу. подскажите решение. в голову ничего не лезит. (задача на языке СИ) вот условие: Сведения о...

Обработка массива структур - C++
Организовать массив структур и поместить в него сведения о нескольких студентах (Фамилия, имя, отчество, дата рождения, домашний адрес,...

Обработка линейного связного списка структур - C++
Доброго времени суток) Народ,помогите пожалуйста разобраться с такой задачей:-|: В сведениях об игрушках указывается название...

Обработка массивов, строк и структур в функциях - C++
Здраствуйте ребята не могу найти теорию на такую тему : Обработка массивов, строк и структур в функциях. Перешерстила кучу сайтов не чего,...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2014, 23:49
Привет! Вот еще темы с ответами:

Обработка массивов структур с использованием контейнеров - C++
Вариант 13 Написать программу, которая содержит текущую информацию о книгах в библиотеке. Сведения о книгах включают: □ номер УДК; ...

Непонятные элементы в выводе списка файлов директории - C++
Всем привет, понадобилось заиметь список файлов в директории, нашел на этом форуме программу #include &lt;stdio.h&gt; #include &lt;dirent.h&gt; ...

Формирование, сортировка и обработка динамических структур данных. - C++
Требуется решить задачу формирования, сортировки и обработки динамических структур данных. Требуется создать динамический массив...

Обработка данных железнодорожного расписания. Массив структур - C++
Ребят, подскажите, как правильно ввести направление поезда, почему-то после trains.direction = ругается на скобку и просит выражение....


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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