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

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

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

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

21.04.2013, 01:31. Просмотров 428. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2013, 01:31     При создании таблицы результат выводится два раза
Посмотрите здесь:

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

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

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

При возведении в степень выводится результат "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...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Torna
0 / 0 / 0
Регистрация: 21.04.2013
Сообщений: 7
22.04.2013, 19:27  [ТС]     При создании таблицы результат выводится два раза #2
Никто не поможет?
castaway
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
22.04.2013, 19:32     При создании таблицы результат выводится два раза #3
Может быть в 90-й строке должно быть while( !fin.eof() ) ?
Torna
0 / 0 / 0
Регистрация: 21.04.2013
Сообщений: 7
22.04.2013, 19:35  [ТС]     При создании таблицы результат выводится два раза #4
Цитата Сообщение от lazybiz Посмотреть сообщение
Может быть в 90-й строке должно быть while( !fin.eof() ) ?
Не помогло
http://puu.sh/2EZFx.png
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 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; )
Torna
0 / 0 / 0
Регистрация: 21.04.2013
Сообщений: 7
22.04.2013, 23:55  [ТС]     При создании таблицы результат выводится два раза #6
Croessmah, можно поподробнее?
Croessmah
Модератор
Эксперт CЭксперт С++
13045 / 7308 / 814
Регистрация: 27.09.2012
Сообщений: 18,041
Записей в блоге: 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2013, 00:56     При создании таблицы результат выводится два раза
Еще ссылки по теме:

Последний элемент из файла выводится 2 раза - C++
Добрый вечер. Подскажите, пожалуйста, почему при чтении из файла последний элемент выводиться 2 раза? Если в файле такие данные: &quot;string1...

Не выводится результат - C++
Мне нужно написать программу по определению приналежности точки к определённой области на C++. Я написала код, когда выполняется...

Почему выводится разный результат? - C++
int main(){ int mass={3,5,3,5,3}; int i=0, r=0; for(int i = 0; i &lt; 5; i++) if(mass % 3 == 0) ...

Не выводится результат рассчета по формуле - C++
Привет уважаемые обитателя форума. Недавно начал изучение с++, использую visio studio 2010 professional. Задачка простая, ввести...


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

Или воспользуйтесь поиском по форуму:
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
Yandex
Объявления
23.04.2013, 00:56     При создании таблицы результат выводится два раза
Ответ Создать тему
Опции темы

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