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

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

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

При создании таблицы результат выводится два раза - C++

21.04.2013, 01:31. Просмотров 434. Ответов 7
Метки нет (Все метки)

При выводе таблицы результатов последний введенный год/страница(по условию) выводится два раза и так же при поиске, не могу понять, в чем проблема
Кликните здесь для просмотра всего текста
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
// laba4.cpp : Defines the entry point for the console application.
//
// 1.cpp : Defines the entry point for the console application.
#include "targetver.h"
#include "stdafx.h"
#include <stdio.h>
#include <tchar.h>
#include <fstream>
#include <iostream>
#include <conio.h>
#include <iomanip>
using namespace std;
 
struct BOOK
{
    int page, year;
};
 
void table(), input(), output(), search();
 
ifstream &operator>>(ifstream &in, BOOK &x)
{
    in>>x.year;
    in>>x.page;
    return in;
}
 
ostream &operator<<(ostream &out, BOOK t)
{
    out.setf(ios::left);
    cout<<"| "<<" | "<<setw(4)<<t.year<<" | "<<setw(5)<<t.page<<" |\n";
    cout<<"------------------------------------------------------\n";
    return out;
}
 
istream &operator>>(istream &in, BOOK &t)
{
    cout<<"Input publishing year: ";
    in>>t.year;
    cout<<"Input page count: ";
    in>>t.page;
    cout<<"\n";
    return in;
}
 
ofstream &operator<<(ofstream &out, BOOK &t)
{
    out<<t.year<<endl<<t.page<<endl;
    return out;
}
 
 
void main()
{
    char c;
    while (1)
    {
        cout<<"\n1. Create datafile";
        cout<<"\n2. Overview database";
        cout<<"\n3. Search";
        cout<<"\n4. Exit";
        cout<<"\nYour choose: ";
        cin>>c;
        switch(c)
        {
        case '1':
            input();
            break;
        case '2':
            output();
            break;
        case '3':
            search();
            break;
        case '4':
            return;
        default:
            cout<<"\nERROR! Input 1 to 4 only!\n";
        }
    }
}
 
void output()
{
    BOOK t;
    ifstream fin;
    fin.open("data.dat", ios::in);
    cout<<"Overviewing...\n";
    table();
    while(fin)
    {
        fin>>t;
        cout<<t;
    }
    fin.close();
}
 
void input()
{
    BOOK t;
    char c;
    ofstream fout;
    fout.open("data.dat");
    do
    {
        cin>>t;
        fout<<t;
        cout<<"Continue?(y/n): ";
        cin>>c;
    } while (c=='y'|| c=='Y');
    fout.close();
}
 
void table()
{
    cout<<"------------------------------------------------\n";
    cout.setf(ios::left);
    cout<<"| "" | "<<setw(4)<<"Year"<<" | "<<setw(5)<<"Pages"<<" |\n";
    cout<<"------------------------------------------------\n";
}
 
void search()
{
    BOOK t;
    int year, page;
    ifstream fin;
    fin.open("data.dat", ios::in);
    cout<<"Enter year: ";
    cin>>year;
    cout<<"\nEnter pages: ";
    cin>>page;
    cout<<"\n\nSearching...\n";
    table();
    while(!fin.eof()){
        fin>>t;
        if (t.year==year && page<t.page)
            cout<<t;
    }
    fin.close();
    return;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2013, 01:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос При создании таблицы результат выводится два раза (C++):

Два раза выводится слово вместо одного - C++
Здесь в первый раз &quot;Бот, &quot; выводится 2 раза, все последующие разы по 1 разу Вот отрывочек из функции-базы бота void...

Даден массив. Все четные елементы массива уменьшыть в два раза, а нечетные увеличить в два раза. - C++
С++. Даден массив. Все четные елементы массива уменьшыть в два раза, а нечетные увеличить в два раза. Сложновато :sorry:

Выводится ошибка: Отсутствует объявление. (при создании функции) - C++
Задача: Спросить у человека несколько фамилий и годы их рождения. Затем... При вводе фамилии программа должна посчитать примерный возраст...

Почему при чтении файла последний символ выводится 2 раза? - C++
если структура файла: 1\nEOF. То почему не выполняется условие if(Ch != '\n') { cout.put(Ch); } и программа выводит в...

Файлы. Программа, которая определяет если такой момент, что два раза вошли по одному пропуску или два раза вышли по одному (выводит все время истину) - C++
Всем привет. Смысл задания примерно следующий: Есть файл Input.txt. Содержание его примерное такое: Все эти цифры могут меняться. 4...

При вводе слова выводится результат сколько в нем переходов от гласных к согласным и наоборот - C++
Требуется написать программу в которой будет 2 функции( мейн и ,,,) в которой при ввовде слова будет вовдится результат сколько в нем...

7
Torna
0 / 0 / 0
Регистрация: 21.04.2013
Сообщений: 7
22.04.2013, 19:27  [ТС] #2
Никто не поможет?
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
22.04.2013, 19:32 #3
Может быть в 90-й строке должно быть while( !fin.eof() ) ?
0
Torna
0 / 0 / 0
Регистрация: 21.04.2013
Сообщений: 7
22.04.2013, 19:35  [ТС] #4
Цитата Сообщение от lazybiz Посмотреть сообщение
Может быть в 90-й строке должно быть while( !fin.eof() ) ?
Не помогло
http://puu.sh/2EZFx.png
0
Croessmah
Эксперт CЭксперт С++
13419 / 7573 / 855
Регистрация: 27.09.2012
Сообщений: 18,646
Записей в блоге: 3
Завершенные тесты: 1
22.04.2013, 22:22 #5
C++
1
2
3
4
5
ofstream &operator<<(ofstream &out, BOOK &t)
{
    out<<t.year<<endl<<t.page<<endl;
    return out;
}
При добавлении последней записи в файл, в конец файла добавляется лишняя строка(endl)
пройдя последнюю запись, этот цикл
C++
1
2
3
4
5
    while(!fin.eof())
    {
        fin>>t;
        cout<<t;
    }
выполняется еще раз, т.к. в файле есть еще строка, но переходит в ошибочное состояние и поэтому в t остаются предыдущие данные, которые и выводятся в консоль ( cout<<t; )
0
Torna
0 / 0 / 0
Регистрация: 21.04.2013
Сообщений: 7
22.04.2013, 23:55  [ТС] #6
Croessmah, можно поподробнее?
0
Croessmah
Эксперт CЭксперт С++
13419 / 7573 / 855
Регистрация: 27.09.2012
Сообщений: 18,646
Записей в блоге: 3
Завершенные тесты: 1
23.04.2013, 00:10 #7
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
using namespace std;
 
struct BOOK
{
    int page, year;
};
 
void table(), input(), output(), search();
 
ifstream &operator>>(ifstream &in, BOOK &x)
{
    in>>x.year;
    in>>x.page;
    return in;
}
 
ostream &operator<<(ostream &out, BOOK &t)//!!!!!!!!!!!!!!!!t по ссылке передаем!!!!!!!!!!!!!!!!!!!!!!!
{
    out.setf(ios::left);
    cout<<"| "<<" | "<<setw(4)<<t.year<<" | "<<setw(5)<<t.page<<" |\n";
    cout<<"------------------------------------------------------\n";
    return out;
}
 
istream &operator>>(istream &in, BOOK &t)
{
    cout<<"Input publishing year: ";
    in>>t.year;
    cout<<"Input page count: ";
    in>>t.page;
    cout<<"\n";
    return in;
}
 
ofstream &operator<<(ofstream &out, BOOK &t)
{
    out<<t.year<<endl<<t.page<<endl;
    return out;
}
 
 
void main()
{
    char c;
    while (1)
    {
        cout<<"\n1. Create datafile";
        cout<<"\n2. Overview database";
        cout<<"\n3. Search";
        cout<<"\n4. Exit";
        cout<<"\nYour choose: ";
        cin>>c;
        switch(c)
        {
        case '1':
            input();
            break;
        case '2':
            output();
            break;
        case '3':
            search();
            break;
        case '4':
            return;
        default:
            cout<<"\nERROR! Input 1 to 4 only!\n";
        }
    }
}
 
void output()
{
    BOOK t;
    ifstream fin;
    fin.open("data.dat", ios::in);
    cout<<"Overviewing...\n";
    table();
    while(fin)
    {
        fin>>t;
          if(fin.good())//Если ошибок при чтении не было, то
             cout<<t;//выводим t
    }
    fin.close();
}
 
void input()
{
    BOOK t;
    char c;
    ofstream fout;
    fout.open("data.dat");
    do
    {
        cin>>t;
        fout<<t;
        cout<<"Continue?(y/n): ";
        cin>>c;
    } while (c=='y'|| c=='Y');
    fout.close();
}
 
void table()
{
    cout<<"------------------------------------------------\n";
    cout.setf(ios::left);
    cout<<"| "" | "<<setw(4)<<"Year"<<" | "<<setw(5)<<"Pages"<<" |\n";
    cout<<"------------------------------------------------\n";
}
 
void search()
{
    BOOK t;
    int year, page;
    ifstream fin;
    fin.open("data.dat", ios::in);
    cout<<"Enter year: ";
    cin>>year;
    cout<<"\nEnter pages: ";
    cin>>page;
    cout<<"\n\nSearching...\n";
    table();
    while(!fin.eof()){
        fin>>t;
        if (t.year==year && page<t.page)
            cout<<t;
    }
    fin.close();
    return;
}
0
Torna
0 / 0 / 0
Регистрация: 21.04.2013
Сообщений: 7
23.04.2013, 00:56  [ТС] #8
Цитата Сообщение от Croessmah Посмотреть сообщение
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
using namespace std;
 
struct BOOK
{
    int page, year;
};
 
void table(), input(), output(), search();
 
ifstream &operator>>(ifstream &in, BOOK &x)
{
    in>>x.year;
    in>>x.page;
    return in;
}
 
ostream &operator<<(ostream &out, BOOK &t)//!!!!!!!!!!!!!!!!t по ссылке передаем!!!!!!!!!!!!!!!!!!!!!!!
{
    out.setf(ios::left);
    cout<<"| "<<" | "<<setw(4)<<t.year<<" | "<<setw(5)<<t.page<<" |\n";
    cout<<"------------------------------------------------------\n";
    return out;
}
 
istream &operator>>(istream &in, BOOK &t)
{
    cout<<"Input publishing year: ";
    in>>t.year;
    cout<<"Input page count: ";
    in>>t.page;
    cout<<"\n";
    return in;
}
 
ofstream &operator<<(ofstream &out, BOOK &t)
{
    out<<t.year<<endl<<t.page<<endl;
    return out;
}
 
 
void main()
{
    char c;
    while (1)
    {
        cout<<"\n1. Create datafile";
        cout<<"\n2. Overview database";
        cout<<"\n3. Search";
        cout<<"\n4. Exit";
        cout<<"\nYour choose: ";
        cin>>c;
        switch(c)
        {
        case '1':
            input();
            break;
        case '2':
            output();
            break;
        case '3':
            search();
            break;
        case '4':
            return;
        default:
            cout<<"\nERROR! Input 1 to 4 only!\n";
        }
    }
}
 
void output()
{
    BOOK t;
    ifstream fin;
    fin.open("data.dat", ios::in);
    cout<<"Overviewing...\n";
    table();
    while(fin)
    {
        fin>>t;
          if(fin.good())//Если ошибок при чтении не было, то
             cout<<t;//выводим t
    }
    fin.close();
}
 
void input()
{
    BOOK t;
    char c;
    ofstream fout;
    fout.open("data.dat");
    do
    {
        cin>>t;
        fout<<t;
        cout<<"Continue?(y/n): ";
        cin>>c;
    } while (c=='y'|| c=='Y');
    fout.close();
}
 
void table()
{
    cout<<"------------------------------------------------\n";
    cout.setf(ios::left);
    cout<<"| "" | "<<setw(4)<<"Year"<<" | "<<setw(5)<<"Pages"<<" |\n";
    cout<<"------------------------------------------------\n";
}
 
void search()
{
    BOOK t;
    int year, page;
    ifstream fin;
    fin.open("data.dat", ios::in);
    cout<<"Enter year: ";
    cin>>year;
    cout<<"\nEnter pages: ";
    cin>>page;
    cout<<"\n\nSearching...\n";
    table();
    while(!fin.eof()){
        fin>>t;
        if (t.year==year && page<t.page)
            cout<<t;
    }
    fin.close();
    return;
}
Все равно результат выводится два раза http://puu.sh/2Fb2k.png
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2013, 00:56
Привет! Вот еще темы с ответами:

При создании класса конструктор вызывается 2 раза, затем вызывается деструктор о_О - C++
Вот такой кодclass A { public: A(){} virtual ~A(){} }; class C { public:

При возведении в степень выводится результат "1.#INF" - C++
При значении &quot;k&quot; больше 4 выводит значение 1.#INF. Как можно это исправить? #include&quot;stdafx.h&quot; #include&lt;iostream&gt; #include&lt;math.h&gt;...

Ошибка в коде. При первом вводе буквы, вводить приходится два раза - C++
Подскажите что не так в коде.При первом вводе буквы,вводить приходиться два раза,и так повторяется периодически.Плюс выводится &quot;нет&quot; при...

5. Напишите программу, которая при вводе вашего (любого) числа будет выводить число в два раза большее. - C++
Напишите программу, которая при вводе вашего (любого) числа будет выводить число в два раза большее.(на языке С) Добавлено через 42...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
23.04.2013, 00:56
Ответ Создать тему
Опции темы

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