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

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

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

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

10.01.2014, 23:49. Просмотров 186. Ответов 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 минут
Хм...извиняюсь.Работает ,но через раз.Кто-нить просто пробегитесь по моему быдлокоду глазами ,где там ошибки?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2014, 23:49     Ошибка в выводе.(обработка структур из файлов)
Посмотрите здесь:

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

Обработка структур AER0FL0T - C++
Описать структуру с именем AER0FL0T, содержащую следующие поля: • название пункта назначения рейса; • номер рейса; • тип самолета. ...

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

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

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

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

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

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

Обработка данных в виде массива структур средствами языка С++ - C++
Нужно определить минимальный год издания. Как это сделать? В читаемом файле вот это: Голдинг ПовелительМух 1954 Оруэлл ...

Как убрать лишние символы при выводе в консоль списка файлов? - C++
Поясните, пожалуйста. Собираю кроссплатформенные методы, для работы с файлами. Взял для разбора такой метод. Всё работает, только вот...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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