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

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

Войти
Регистрация
Восстановить пароль
 
Pavel_2011
1 / 1 / 0
Регистрация: 23.10.2013
Сообщений: 66
#1

При считывании файла выходит "мммммммммм" - C++

19.04.2014, 21:05. Просмотров 297. Ответов 3
Метки нет (Все метки)

Ребята, помогите разобраться с программой. При считывание файла выходит мммммммммм. Не пойму в чем дело. Помогите исправить эту ошибку



http://www.cyberforum.ru/attachment....1&d=1397926975


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
#include <iostream> 
#include <fstream>
#include <windows.h> 
#include <string.h> 
#include <iomanip> 
using namespace std; 
const int nmax=100; 
struct person //Объявление структуры 
{ 
    char fam[30], //Фамилия 
        name[25], //Имя 
        otch[25], //отчество 
        street[30], //Улица 
        phone[12]; 
    int house, flat;//номер дома, квартиры, номер телефона 
}; 
int vvod(person st[])
    //Функция, выполняющая считывание данных из текстового файла и
    //их сохранение в двоичный файл
{ 
    ifstream in;//Объявляем входной поток для текстового файла
    ofstream out("perbin.dat", ios::binary);
    //Объявляем выходной поток и привязываем его к бинарному файлу
    in.open("persons.txt"); // открываем текстовый файл
    int k=0, s=0;
    if (in)//Если текстовый файл успешно открылся
    {
        while (!in.eof()) // пока не конец текстового файла 
        {   //считываем из файла все данные о абонентах
            in>>st[k].fam;//Фамилия
            in>>st[k].name;//Имя
            in>>st[k].otch;//Отчество
            in>>st[k].street;//Улица
            in>>st[k].house;
            in>>st[k].flat;
            in>>st[k].phone;//номер телефона
            k++;
            out.write((char*)&st,sizeof(person));
        }
            in.close();//закрываем текстовый файл
            out.close();//закрываем двоичный файл
    }
    else cout<<"Такого файла нет!";
    return k;
}
        void print_mas()
            //Функция распечатки данных, хранящихся в двоичном файле
        { 
            person st;
            ifstream in; //Объявляем входной поток для двоичного файла
            in.open("perbin.dat", ios::binary);
            //Связываем поток с двоичным файлом "perbin.dat"
            if (in) //Если двоичный файл успешно открылся
            {//Будем распечатывать данные в виде таблицы
                cout<<"Исходная информация об абонентах"<<endl; 
                cout<<setw(13)<<left<<"Фамилия"<<setw(13)<<"Имя"<< 
                    setw(17)<<"Отчество"<<setw(13)<<"Улица"<<setw(7)<<"Дом"<< 
                    setw(4)<<"Кв."<<setw(5)<<"Телефон"<<endl;
                in.read((char*)&st,sizeof(person));
                // Считываем структуру целиком из двоичного файла
                while (!in.eof())//Пока не конец двоичного файла
                {//Печатаем все данные о текущем студенте
                    cout<<setw(13)<<st.fam<<setw(13)<< 
                        st.name<<setw(17)<<st.otch<<setw(13)<<st.street<<setw(7)<< 
                        st.house <<setw(4) 
                        << st.flat<<setw(5)<< st.phone <<endl;
                    in.read((char*)&st,sizeof(person));
                    //Считываем следующую запись из файла
                }
                in.close();//Закрываем двоичный файл
            }
            else cout<<"Такого файла нет!";
        }
 
        //Функция выводит данные об абонентах, проживающих на улице, 
        //название которой вводится с клавиатуры 
        void dataStreet(char streetname[],person st[], int n) 
        { 
            for (int i=0;i<n; i++) 
                if (strcmp(st[i].street, streetname)==0) cout<<setw(13)<<st[i].fam<<setw(13)<< 
                    st[i].name<<setw(17)<<st[i].otch<<setw(13)<<st[i].street<<setw(7)<< 
                    st[i].house <<setw(4) 
                    << st[i].flat<<setw(5)<< st[i].phone <<endl; 
        } 
        //Функция сортировки данных массива по телефонe 
        void sortPhone(person spisok[], int n) //порядке (пузырек) 
        { person z; 
        bool fl; 
        do 
        { fl=1; //Флаг поднять 
        for (int i=0; i<n-1;i++) 
            if(strcmp(spisok[i].phone,spisok[i+1].phone)>0) 
                //Если они расположены не верно, то переставляем их местами 
            { 
                z=spisok[i]; 
                spisok[i]=spisok[i+1]; 
                spisok[i+1]=z; 
                fl=0; //Флаг опустить 
            } 
        } 
        while (!fl); //Если флаг не опускался, то массив отсортирован 
        } 
        void printNumber(person spisok[], int n, char phonenum[]) 
        { 
            char search[4]; 
            for (int i=0;i<n; i++){ 
                for (int j=0;j<4;j++) search[j]=spisok[i].phone[j]; 
                if (strncmp(search, phonenum, 4)==0) 
                    cout<<setw(13)<<spisok[i].fam<<setw(13)<< 
                    spisok[i].name<<setw(17)<<spisok[i].otch<<setw(13)<<spisok[i].street<<setw(7)<< 
                    spisok[i].house <<setw(4) 
                    << spisok[i].flat<<setw(5)<< spisok[i].phone <<endl; 
            } 
        } 
        void main() 
        {
            setlocale(LC_ALL, "Russian");
            const int nmax=100; //Максимальный размер массива 
            person spisok[nmax]; 
            int i=0; //Число абонентов 
            char streetname[30],phonenum[5]; //Улица 
            int k=vvod(spisok); 
            print_mas(); 
            cout<<"Введите название улицы для поиска абонентов"<<endl; 
            cin>>streetname; 
            cout<<" Абоненты, проживающие на улице "<<streetname<<endl; 
            dataStreet(streetname, spisok, k); 
            cout<<"Введите первые 4 цифры"<<endl; 
            cin>>phonenum; 
            cout<<"Абоненты, номера телефонов которые начинаются с зад.значений"<<endl;
            printNumber(spisok, k,phonenum); 
            sortPhone (spisok,k);
            print_mas(); 
            system ("pause"); 
        }
Миниатюры
При считывании файла выходит "мммммммммм"  
Вложения
Тип файла: txt persons.txt (741 байт, 4 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.04.2014, 21:05     При считывании файла выходит "мммммммммм"
Посмотрите здесь:

Проблема при считывании из файла C++
Ошибка "Access violation..." при попытке отсортировать структуру из файла быстрым методом C++
C++ Переполнение при считывании из файла
C++ создал "circle.h" файл. При компиляции Cpp файла выдаёт unable to open include file 'circle.h'
"4102" в конце файла при записи C++
Выводит "мусор" при считывании файла C++
"Stack around the variable 'a' was corrupted" при выводе содержимого файла на экран C++
"Нарушение прав доступа при чтении "0x00000000"" C++
C++ Переполнение строки при считывании из файла
C++ Ошибка при подключении заголовочного файла: "error LNK2019: unresolved external symbol"
Исключение "unwanted exception at 0x775c15ee Access violation" при считывание из файла C++
C++ Ошибка при быстрой сортировке файла: "string subscript out of range"

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KOPOJI
19.04.2014, 21:17
  #2

Не по теме:

Поздравляем, вы написали корову!

Supernatural
286 / 142 / 28
Регистрация: 22.11.2010
Сообщений: 1,467
19.04.2014, 21:35     При считывании файла выходит "мммммммммм" #3
немного не понял твой код, но если в нем поменять имя файла, то при выводе кое-что меняется.
на втором скрине исходный код, на первом поменял в print_mas имя файла с perbin.dat на persons.txt.
Миниатюры
При считывании файла выходит "мммммммммм"   При считывании файла выходит "мммммммммм"  
Pavel_2011
1 / 1 / 0
Регистрация: 23.10.2013
Сообщений: 66
19.04.2014, 21:46  [ТС]     При считывании файла выходит "мммммммммм" #4
Я исправил и все равно есть некоторые иероглифы не понятные. Можете сами в коде программы исправить ошибку??? Чтобы он наконец то начал выводить все правильно и пукты, чтобы работали. А то я когда ввожу ему улицу, и чтобы он мне выдал человека, который живет на этой улице, он опять выдает иероглифы. И мне нужно еще сделать такую функцию, вывод информации о людях, чья фамилия начинается на заданную букву (задается с клавиатуры); Не пойму как эту ф-цию нужно записать, чтобы она работала. Помогите, если не сложно в коде программе исправить, что все работала и ф-цию дописать!
Yandex
Объявления
19.04.2014, 21:46     При считывании файла выходит "мммммммммм"
Ответ Создать тему
Опции темы

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