Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
45 / 45 / 12
Регистрация: 12.03.2013
Сообщений: 167
1

Считывание из файла

10.05.2013, 20:24. Показов 710. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет! Есть вот такая проблема: при считывании данных из файла в объект ниоткуда берутся лишние данные. В чем может быть проблема? Вот пример файла:
1 1 1
2 2 2
А вот что получается когда считываю файл:
1 1 1
2 2 2
2 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
void output(Toys &T)
{
    ifstream in("1.txt");
    char ch;
    while((ch = in.get()) != EOF)
    {
        in.unget();
        in >> T;
        cout << T;
    }
    in.close();
}
Вот полный код:
Toys.h
Кликните здесь для просмотра всего текста
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
#ifndef _TOYS_H_
#define _TOYS_H_
 
#include <iostream>
#include <fstream>
 
using namespace std;
 
class Toys
{
    friend ostream& operator<<(ostream& output,const Toys& T)
    {
        output << T.name << " ";
        output << T.vartist << " ";
        output << T.vikovi_mechi << endl;
 
        return output;
    }
    friend istream& operator>>(istream& intput, Toys& T)
    {
        intput >> T.name;
        intput >> T.vartist;
        intput >> T.vikovi_mechi;
 
        return intput;
    }
    friend ifstream& operator>>(ifstream& intput, Toys& T)
    {
        intput >> T.name;
        intput >> T.vartist;
        intput >> T.vikovi_mechi;
 
        return intput;
    }
    friend ofstream& operator<<(ofstream& output, Toys& T)
    {
        output << T.name << " ";
        output << T.vartist << " ";
        output << T.vikovi_mechi << endl;;
 
        return output;
    }
public:
    bool vart(int tmp)
    {
        if(vartist <= tmp && vikovi_mechi <= 5) return true;
        return false;
    }
    char* getName(){return name;}
    int getVik(){return vikovi_mechi;}
private:
    char name[10];
    int vartist;
    int vikovi_mechi;
};
 
#endif

main.cpp
Кликните здесь для просмотра всего текста
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
#include <conio.h>
#include <Windows.h>
#include "Toys.h"
 
int menu();
void input(Toys&);
void output(Toys&);
void Show_name(Toys&);
void dozapus(Toys&);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    system("color 0F");
    int key = 0;
    Toys T;
    while(true)
    {
        key = menu();
        system("cls");
        if(key == 0)
        {
            input(T);
        }
        if(key == 1)
        {
            output(T);
            system("pause>0");
        }
        if(key == 2)
        {
            Show_name(T);
            system("pause>0");
        }
        if(key == 3)
        {
            dozapus(T);
            system("pause>0");
        }
        if(key == 4)
        {
            break;
        }
    }
    return 0;
}
void dozapus(Toys &T)
{
    ofstream out("1.txt",ios::app);
    cin>>T;
    out<<T;
    out.close();
}
void Show_name(Toys &T)
{
    ifstream in("1.txt");
    char ch;
    int tmp = 2;
    while((ch = in.get()) != EOF)
    {
        in.unget();
        in >> T;
        if(T.vart(tmp)) cout << T.getName();
    }
    in.close();
}
void output(Toys &T)
{
    ifstream in("1.txt");
    char ch;
    while((ch = in.get()) != EOF)
    {
        in.unget();
        in >> T;
        cout << T;
    }
    in.close();
}
void input(Toys &T)
{
    ofstream out("1.txt");
    int tmp;
    cin>>tmp;
    while(tmp)
    {
        cin>>T;
        out<<T;
        tmp--;
    }
    out.close();
}
int menu()
{
    int key = 0;
    int code;
    do
    {
        system("cls");
        key = (key+5)%5;
 
        if(key==0) cout<<"=> Ввести дані."<<endl;
        else cout<<"   Ввести дані."<<endl;
 
        if(key==1) cout<<"=> Вивести дані."<<endl;
        else cout<<"   Вивести дані."<<endl;
 
        if(key==2) cout<<"=> Редагувати дані."<<endl;
        else cout<<"   Редагувати дані."<<endl;
 
        if(key==3) cout<<"=> Дозаписати дані."<<endl;
        else cout<<"   Дозаписати дані."<<endl;
 
        if(key==4) cout<<"=> Вихід."<<endl;
        else cout<<"   Вихід."<<endl;
 
        code = getch();
 
        if(code == 80) key++;
        if(code == 72) key--;
    }while(code != 13);
 
    return key;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
10.05.2013, 20:24
Ответы с готовыми решениями:

Заменить считывание с клавиатуры на считывание из файла
Помогите пожалуйста, ни разу не работал со считыванием из файла поэтому не понимаю как и что...

Считывание файла в массив и запись нового файла
Консоль VS C++. Текстовый файл открывается как бинарный, и считывается по 100 байт в массив - и...

Считывание из файла
Добрый день! Помогите, пожалуйста Создаю файл и записываю в него информацию. string tF =...

Считывание из файла
Имею файл с такой структурой type rec=record images:array of Tobject; end; var...

7
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
10.05.2013, 20:30 2
Why so seriouS, проблема в том, что символ конца файла идет не сразу по окончанию текста, а а поток настроен так,что системные символы он просто отбрасывает. Потом получается,что еще не конец файла, но Вы продолжаете читать его, хотя система ничего не кладет в переменную.
1
45 / 45 / 12
Регистрация: 12.03.2013
Сообщений: 167
10.05.2013, 20:34  [ТС] 3
metaluga145, а не подскажете как можно это исправить?
0
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
10.05.2013, 20:36 4
Why so seriouS, так чтобы сразу все было хорошо, не знаю. А удалить последние два или 3 символа с конца строки всегда можно
1
45 / 45 / 12
Регистрация: 12.03.2013
Сообщений: 167
10.05.2013, 20:39  [ТС] 5
metaluga145, удалить можно, но я что-то не представляю как это сделать) Может покажете малый пример как это выглядит?)
0
244 / 245 / 38
Регистрация: 08.04.2013
Сообщений: 927
10.05.2013, 20:52 6
Цитата Сообщение от Why so seriouS Посмотреть сообщение
key = menu();
* * * * system("cls");
* * * * if(key == 0)
* * * * {
* * * * * * input(T);
* * * * }
* * * * if(key == 1)
* * * * {
* * * * * * output(T);
* * * * * * system("pause>0");
* * * * }
* * * * if(key == 2)
* * * * {
* * * * * * Show_name(T);
* * * * * * system("pause>0");
* * * * }
* * * * if(key == 3)
* * * * {
* * * * * * dozapus(T);
* * * * * * system("pause>0");
* * * * }
* * * * if(key == 4)
* * * * {
* * * * * * break;
* * * * }
* * }
для таких целей лучше использовать оператор switch

Добавлено через 9 минут
а в чем Вы пишите? просто у меня все работает
0
45 / 45 / 12
Регистрация: 12.03.2013
Сообщений: 167
10.05.2013, 21:01  [ТС] 7
visual studio 2010 express. А в чем вы пишете?
0
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
10.05.2013, 21:02 8
Why so seriouS, делай вот так :
C++
1
2
3
while(in >> T) {
     cout << T;
}
1
10.05.2013, 21:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.05.2013, 21:02
Помогаю со студенческими работами здесь

считывание из файла
привет всем. полазил по форуму но так и не понял как считывать с файла для моей задачи.. как...

Считывание из файла
Ребят, помогите, пожалуйста, новичку разобраться=) Есть файл, в котором расположена информация...

Считывание из файла
Помогите пожалуйста! Почему не работает? Нужно считать из файла в двумерный массив матрицу...

Считывание из файла
Добрый день! Помогите, пожалуйста. Есть список и класс static List&lt;Acc_T&gt; acc_t; ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru