Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Torna
0 / 0 / 0
Регистрация: 21.04.2013
Сообщений: 7
1

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

21.04.2013, 01:31. Просмотров 468. Ответов 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
Ответы с готовыми решениями:

Два раза выводится слово вместо одного
Здесь в первый раз &quot;Бот, &quot; выводится 2 раза, все последующие разы по 1 разу ...

Даден массив. Все четные елементы массива уменьшыть в два раза, а нечетные увеличить в два раза.
С++. Даден массив. Все четные елементы массива уменьшыть в два раза, а...

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

Почему при чтении файла последний символ выводится 2 раза?
если структура файла: 1\nEOF. То почему не выполняется условие if(Ch !=...

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

7
Torna
0 / 0 / 0
Регистрация: 21.04.2013
Сообщений: 7
22.04.2013, 19:27  [ТС] 2
Никто не поможет?
0
castaway
Эксперт С++
4934 / 3039 / 455
Регистрация: 10.11.2010
Сообщений: 11,119
Записей в блоге: 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
++Ͻ
14743 / 8424 / 1598
Регистрация: 27.09.2012
Сообщений: 20,722
Записей в блоге: 2
Завершенные тесты: 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
++Ͻ
14743 / 8424 / 1598
Регистрация: 27.09.2012
Сообщений: 20,722
Записей в блоге: 2
Завершенные тесты: 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
23.04.2013, 00:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.04.2013, 00:56

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

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

При возведении в степень выводится результат "1.#INF"
При значении &quot;k&quot; больше 4 выводит значение 1.#INF. Как можно это исправить? ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

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