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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ «Работа с функциями, возвращающими значения. Передача параметров по значению» http://www.cyberforum.ru/cpp-beginners/thread1067985.html
Прошу помочь очень нужно.. Простым способом . Заранее спасибо) Ссылка на картинку с задачкой : Буду очень благодарен!
C++ Вывод элементов бинарного файла на экран После ввода на экран элементов файла, окно пропадает. Подскажите пожалуйста как вывести на экран элементы нового файла f1. Заранее спасибо. ЛАЙК каждому ответившему) Задание Задан бинарный файл с... http://www.cyberforum.ru/cpp-beginners/thread1067947.html
C++ Определить сумму элементов, расположенных на главной диагонали матрицы
Ввести матрицу размером NxM. Память для массива выделить динамически. вывести на экран исходные данные и полученный результат. Предусмотреть в программе использование функции пользователя. Определить...
C++ Настройка OpenCV в MinGW
я скачал. Куда теперь кидать? Как подключать? Что-то я не понимаю... Добавлено через 27 минут подскажите пожалуйстааа!!! Добавлено через 1 час 26 минут апп Добавлено через 11 минут я...
C++ Перегрузка оператора + для динамической матрицы http://www.cyberforum.ru/cpp-beginners/thread1067913.html
Народ тема такая нужно перегрузить оператор + для динамической матрицы . Ошибка походу в границах но я не могу понять где ? Собственно код : #include <iostream> #include <ctime> using...
C++ Компилятор неправильно отображает кириллицу компилятор в Dev-C++ вместо кириллицы выдает непонятные смволы похожие на кириллицу. а результаты отображает правильно))) спасибо за помощь))) #include <iostream> using namespace std; int... подробнее

Показать сообщение отдельно
andryshka
2 / 2 / 0
Регистрация: 05.12.2013
Сообщений: 81

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

10.01.2014, 23:49. Просмотров 199. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru