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

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

Восстановить пароль Регистрация
 
andryshka
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 81
10.01.2014, 23:49     Ошибка в выводе.(обработка структур из файлов) #1
Задача следующая:Вывести список студентов студентов ,имеющих неудовлетворительную оценку (меньше 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++
C++ Обработка массивов, строк и структур в функциях
C++ обработка структур данных.
Обработка динамических структур C++
Обработка структур с++ C++
C++ Обработка массива структур
Непонятные элементы в выводе списка файлов директории C++
Обработка данных железнодорожного расписания. Массив структур C++

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

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

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