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

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

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

Ввести пользователю цену журнала меньшую, чем указанная в файле - C++

12.04.2012, 02:30. Просмотров 547. Ответов 6
Метки нет (Все метки)

Доброго времени суток !

У меня беда,долго времени ушло на написание этого кода. Все готово,кроме одной функций.
Надеюсь на Вашу помощь
Заранее благодарен!

ВОТ КОД :
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
142
143
144
145
146
147
148
149
150
151
152
153
154
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
#include <stdlib.h>
 
using namespace std;
 
struct Journal
{
    string name;
    int code;
    double price;
};
 
void Delete() // Deleting additional data's.
{
    FILE *fp;
    fp = fopen("test.txt","w");
    if(fp==NULL)
    {
        _getch();
    }
    cout<<"File successfully erased";
    fclose(fp);
    cout << endl;
}
 
int main()
{
    int numberOfJournals=0;
    Journal *mas=new Journal[numberOfJournals];
 
    int choice=0;
 
    while(choice!=5)
    {
 
        //MENU
        cout <<"1.Add data"<<endl;
        cout <<"2.View data"<<endl;
        cout <<"3.Delete" <<endl;
        cout <<"4.Price is < than the specified" <<endl;
        cout <<"5.Exit" <<endl;
 
        cin>>choice;
 
        //Add data.
        if(choice==1)
        {
            int numberOfJournals=0;
 
            cout << "Enter numbers of journals:"<<endl;
            cin>>numberOfJournals;
 
            Journal *mas=new Journal[numberOfJournals];
 
            for(int i=0; i<numberOfJournals; i++)
            {
                cout<<i+1<<" : "<<endl;
                cout<<"Journal name: ";
                cin.get();
                cin>>mas[i].name;
                cout<<"Code: ";
                cin>>mas[i].code;
                cout<<"Price: ";
                cin>>mas[i].price;
                cout<<endl<<endl;
            }
            ofstream outfile;
            outfile.open("test.txt");
            for(int i=0; i<numberOfJournals; i++)
                outfile << mas[i].name << " " << mas[i].code << " " << mas[i].price << endl;
            system("cls");
        }
 
        //View additional data.
        if(choice==2)
        {
            ifstream infile("test.txt");
            if(!infile)
                cout <<"File does not exist" <<endl;
            else
            {
                cout <<"File successfully opened"<<endl;
                char c;
                while (infile)
                {
                    infile.get(c);
                    if(!infile.eof())
                    {
                        cout<<c;
                    }
                }
                infile.close();
                cout <<endl;
                cout <<"File successfully closed"<<endl;
            }
            _getch();
            system("cls");
 
            for( int i = 0; i < numberOfJournals; i++)
            {
                infile >>mas[i].name
                    >>mas[i].code
                    >>mas[i].price;
                cout <<mas[i].name<<" "<<mas[i].code<<" " <<mas[i].price<<endl;
            }
            _getch();
            system("cls");
        }
        //Delete Additional data.
        if(choice==3)
        {
            Delete();
        }
        //Price is < than the specified.
        if(choice==4)
        {
            double priceOfJournals;
            int count=0;
            ifstream infile;
            infile.open("test.txt");
            for( int i = 0; i < numberOfJournals; i++)
            {
                infile >>mas[i].name
                    >>mas[i].code
                    >>mas[i].price;
                cout <<mas[i].name<<" "<<mas[i].code<<" " <<mas[i].price<<endl;
            }
            cout << "Enter Price : ";
            cin >> priceOfJournals;
            for(int i = 0 ; i < numberOfJournals; i++)
            {
                if(mas[i].price < priceOfJournals)
                {
                    count++;
                    continue;
                }
            }
            cout << "Quantity of Journals " << count << endl; 
            _getch();
            system("cls");
        }
 
        //Exit.
        if(choice==5)
        {
            system("Pause");
        }
    }
    return 0;
}
//--------------------------------------------------
Дело в том,что он полностью рабочий ! Но есть одно НО :S Если выбрать в меню номер 4,то он без проблем переходит на выполнения задания,вот только почему то не считывает значения указанные в файле. Суть дела : Ввести пользователю цену журнала меньшую,чем указаная в данных ( файле ). Голову себе уже сломал... П.С --- данные в файл записывает без проблем и читает тоже,только этот единственный геморой.
Кто нить может подскажет! Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2012, 02:30     Ввести пользователю цену журнала меньшую, чем указанная в файле
Посмотрите здесь:

Есть данные о шести товарах. Ввести числовой код одного из них, получить цену - C++
Ребята помогите пожалуйста напистаь не большую програмку на с++ это очень срочно нужно. Есть данные о шести товаров. Ввести числовой код...

char массив, get(), ввести больше символов чем в массиве - C++
#include &lt;iostream&gt; using std::cin; using std::cout; using std::endl; int main() { setlocale(LC_ALL,&quot;&quot;); char...

Написать программу, которая предлагает пользователю ввести год, проверяет, является ли он високосным - C++
Написать программу, которая предлагает пользователю ввести год, проверяет, является ли он високосным (кратен 4, если заканчивается на 00,...

Не могу ввести в файл строку во время чтения, указатель позиции в файле - C++
читаю из файла данные в структуру, и сравниваю их с str и str2, при совпадении надо будет добавить другую структуру в файл. Решил сделать...

Написать программу, которая предлагает пользователю ввести число и выводит в консоль его факториал - C++
Написать программу, которая предлагает пользователю ввести число и выводит в консоль его факториал. использовать только for .

Написать программу, которая предлагает пользователю ввести радиус окружности и считает площадь этой окружнос - C++
Написать программу, которая предлагает пользователю ввести радиус окружности и считает площадь этой окружности. Число Pi задать в...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IPtv
8 / 8 / 0
Регистрация: 10.04.2012
Сообщений: 34
12.04.2012, 04:43     Ввести пользователю цену журнала меньшую, чем указанная в файле #2
у вас на два new ни одного delete (да и один new лишний)

C++
1
2
int numberOfJournals=0;
Journal *mas=new Journal[numberOfJournals];
хм....

C++
1
2
3
4
5
6
7
8
9
10
11
infile.close();
/*...*/
_getch();
system("cls");
 
for( int i = 0; i < numberOfJournals; i++)
    /// угу. а numberOfJournals == 0, стр 31 стр 51 сравните - всё поймёте. то же самое и с массивами
{
    infile >> mas[i].name   /// поток же уже закрыт, см пару строчек выше
/*...*/
}
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
12.04.2012, 08:01     Ввести пользователю цену журнала меньшую, чем указанная в файле #3
Цитата Сообщение от ugabuga Посмотреть сообщение
Суть дела : Ввести пользователю цену журнала меньшую,чем указаная в данных ( файле ).
Я лично вижу, что в обработке if (choise == 4) данные только читаются из файла. И все. Больше там ничего нет. Никакая цена нигде не корректируется.
ugabuga
1 / 1 / 0
Регистрация: 05.04.2012
Сообщений: 22
12.04.2012, 12:39  [ТС]     Ввести пользователю цену журнала меньшую, чем указанная в файле #4
Ребята,что-то я со всем в печали...
Все тыкаюсь,брыкаюсь с этим кодом и без успешно! Там еще какая та тема пошла с самим файлом : если он пуст и ты его открываешь для чтения,то там выводятся какие-то значения ( 038888x9204399 ). Как это убрать и что вообще значят эти цифры?!
Может кто сможет код подкорректировать и выложить.
Буду очень благодарен!
IPtv
8 / 8 / 0
Регистрация: 10.04.2012
Сообщений: 34
12.04.2012, 17:50     Ввести пользователю цену журнала меньшую, чем указанная в файле #5
Цитата Сообщение от ugabuga Посмотреть сообщение
Ребята,что-то я со всем в печали...
... тема пошла с самим файлом : если он пуст и ты его открываешь для чтения,то там выводятся какие-то значения ( 038888x9204399 ). Как это убрать и что вообще значят эти цифры?!
...
проверяйте при чтении на eof(), примерно так же как на строчке 90 в первом посте. цифры - мусор, файл же пустой, откуда там взяться толковым данным.

Цитата Сообщение от ugabuga Посмотреть сообщение
Все тыкаюсь,брыкаюсь с этим кодом и без успешно!
хм, ну кто ж знает, что именно там у вас безуспешно, что комментировать не понятно. вы же уже пофиксили дублирование имён переменных в разных областях видимости?
ugabuga
1 / 1 / 0
Регистрация: 05.04.2012
Сообщений: 22
13.04.2012, 04:31  [ТС]     Ввести пользователю цену журнала меньшую, чем указанная в файле #6
Доброго времени суток !!!
Вот измененый код но с один багом. Я до сих пор не понимаю,что мне нужно вставить и куда,для того чтобы код работал без багов.

Если можно напишите мне проверку и скажите куда ее вставить. Я только учусь,поэтому могу тупить... =(((
Заранее благодарен!!!

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
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
#include <stdlib.h>
 
using namespace std;
 
struct Journal
{
    char name[30];
    char code[10];
    double price;
};
 
void Delete() // Deleting additional data's.
{
    FILE *fp;
    fp = fopen("test.txt","w");
    if(fp==NULL)
    {
        _getch();
    }
    cout<<"File successfully erased";
    fclose(fp);
    cout << endl;
}
 
int main()
{
    int numberOfJournals=0;
 
    int choice=0;
 
    Journal *mas=new Journal[numberOfJournals];
 
    while(choice!=5)
    {
 
        //MENU
        cout <<"1.Add data"<<endl;
        cout <<"2.View data"<<endl;
        cout <<"3.Delete" <<endl;
        cout <<"4.Price is < than the specified" <<endl;
        cout <<"5.Exit" <<endl;
 
        cin>>choice;
 
        //Add data.
        if(choice==1)
        {
            int numberOfJournals=0;
 
            cout << "Enter quantity of journals:"<<endl;
 
            cin >> numberOfJournals;
 
            Journal *mas=new Journal[numberOfJournals];
 
            for(int i=0; i<numberOfJournals; i++)
            {
 
                cout<<i+1<<" : "<<endl;
                cout<<"Journal name: ";
                cin.get();
                cin>>mas[i].name;
                cout<<"Code: ";
                cin>>mas[i].code;
                cout<<"Price: ";
                cin>>mas[i].price;
                cout<<endl<<endl;
            }
            ofstream f;
            f.open("test.txt");
            if(!f)
            {
                cout << "Error!\n";
            }
            else
            {
                cout << "Enter the name,the code,the price\n"
                    << "Input EOF for the end.\n";
            }
            {
                for(int i=0; i<numberOfJournals; i++)
                    f << mas[i].name << " " << mas[i].code << " " << mas[i].price << endl;
                cout <<"> ";
            }
 
            _getch();
            system("cls");
        }
        //View additional data.
        if(choice==2)
        {
            ifstream f("test.txt");
            if(!f)
                cout <<"Error!\n"; 
            else
            {
                mas = new Journal[100];
                int counter = 0;
                while(!f.eof())
                {
                    f >>mas[counter].name
                        >>mas[counter].code
                        >>mas[counter].price;
 
                    cout <<mas[counter].name<<" "<<mas[counter].code<<" " <<mas[counter].price<<endl;
                    counter++;
                }
                f.close();
                cout <<endl;
                cout <<"File successfully closed"<<endl;
            }
 
            for( int i = 0; i < numberOfJournals; i++) 
            {
                f >>mas[i].name
                    >>mas[i].code
                    >>mas[i].price;
                cout <<mas[i].name<<" "<<mas[i].code<<" " <<mas[i].price<<endl;
            }
            _getch();
            system("cls");
        }
        //Delete Additional data.
        if(choice==3)
        {
            Delete();
        }
        //Price is < than the specified.
        if(choice==4)
        {
            double priceOfJournals;
            int j=0;
            ifstream f; 
            f.open("test.txt");
            mas= new Journal[100];
            int counter=0;
            while(!f.eof())
            {
                f >>mas[counter].name
                    >>mas[counter].code
                    >>mas[counter].price;
 
 
                cout <<mas[counter].name<<" "<<mas[counter].code<<" " <<mas[counter].price<<endl;
                counter++;
            }
            cout << "Enter Price : "; 
            cin >> priceOfJournals;
 
            for(int i = 0 ; i < counter-1; i++)
            {
                if(mas[i].price < priceOfJournals) 
                {
                    j++;
                    continue;
                }
            }
            cout << "Quantity of Journals " << j << endl; 
            _getch();
            system("cls");
        }
 
        //Exit.
        if(choice==5)
        {
            system("Pause");
        }
 
    }
    return 0;
}
 
//==================
На скриншоте показан баг. Надеюсь поможете его исправить. Спасибо (hug) !
Миниатюры
Ввести пользователю цену журнала меньшую, чем указанная в файле  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2012, 15:01     Ввести пользователю цену журнала меньшую, чем указанная в файле
Еще ссылки по теме:

Написать функцию, которая предлагает пользователю ввести с клавиатуры три числа типа unsigned int - C++
Я самое наглое , ленивое и бессовестное чудовище)) но тем не менее Напишите функцию, которая предлагает пользователю ввести с...

Ввести с клавиатуры знак Зодиака. Найти в файле запись с таким знаком и вывести его - C++
Ребят, помогите пожалуйста, 29 июня экзамен по &quot;Основы программирования&quot;,кто сколько сможет сделать задач, тем всей группой поставим &quot;+&quot;...

Напишите программу, которая позволяет пользователю ввести число, а затем генерирует таблицу размером 20 строк на 10 столбцов - C++
вот задача Решения к упражнениям, помеченным знаком *, можно найти в приложении Ж. *1. Предположим, вы хотите создать таблицу...

Написать программу, которая предлагает пользователю ввести год, проверяет, является ли он високосным (кратен 4, если заканчивается на 00, то еще кр - C++
Написать программу, которая предлагает пользователю ввести год, проверяет, является ли он високосным (кратен 4, если заканчивается на 00,...


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

Или воспользуйтесь поиском по форуму:
IPtv
8 / 8 / 0
Регистрация: 10.04.2012
Сообщений: 34
13.04.2012, 15:01     Ввести пользователю цену журнала меньшую, чем указанная в файле #7
смотрите ваш листинг:
  • строки 31 и 35 - вы создаёте пустой массив, нафига зачем?
  • строки 52 58 - перекрываете две переменные (numberOfJournals и mas) из более "широкой" области видимости, при этом забываете уладить mas (delete[] mas при выходе из этой области видимости. более того, т.к. numberOfJournals из строки 31 так и осталась = 0 (т.к. она была "спрятана" за переменной из строки 52), то цикл в строках 117-123 никогда не будет выполнен.
  • mas из строки 35 не удаляется при завершении программы.
  • т.к. mas массив нулевой длины - занося туда данные (за исключением пункта 1, где создаётся другой массив с таким же именем) вы рискуете нарваться на "access violation" (чтение/запись по неверному адресу).
совет - попробуйте на бумажке написать словами алгорим а потом проверьте совпадает ли он с кодом. так проще чем всё из головы писать сразу. проверьте все возможные варианты и комбинации (например если запустить программу и выбрать сразу пункт 2 без предварительного 1, что будет?). я бы вот посоветовал или вводить (спрашивать у пользователя) количество журналов в каждом случае (ну кроме выбора пункта 3 и 5) или пихать в файл перед журналами их количество, и соотв. считывать не забывать.

по поводу бага на картинке - запись в файле видимо одна, а считать пытается две. почему так, понять просто по строкам 103-111 - проверка eof() только в начале цикла, а вывод в конце - следовательно программа считает мусор выведет на экран и только потом попадёт на while(!f.eof()) и завершит цикл. (пользуйтесь пошаговым отладчиком, да).

удачи, в общем. если не добьёте сами (мелочь же осталась), вечером напишу код, ну или может кто ещё напишет
Yandex
Объявления
13.04.2012, 15:01     Ввести пользователю цену журнала меньшую, чем указанная в файле
Ответ Создать тему
Опции темы

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