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

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

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

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

12.04.2012, 02:30. Просмотров 561. Ответов 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,то он без проблем переходит на выполнения задания,вот только почему то не считывает значения указанные в файле. Суть дела : Ввести пользователю цену журнала меньшую,чем указаная в данных ( файле ). Голову себе уже сломал... П.С --- данные в файл записывает без проблем и читает тоже,только этот единственный геморой.
Кто нить может подскажет! Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2012, 02:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ввести пользователю цену журнала меньшую, чем указанная в файле (C++):

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

Обнуляется указанная структура пользователю - 1С Битрикс
Добрый день. В настройках пользователя есть пункт где его можно добавить в группу (структура организации) я добавлю, на завтрашний день...

Сканирование программой Hdd scan. О чем говорит указанная ошибка? - Жесткие диски
http://www.cyberforum.ru/attachment.php?attachmentid=365404&amp;stc=1&amp;d=1392244013 ребят посмотрите кто разбирается в этом что за ошибка...

DataGridView - указанная строка содержит больше ячеек, чем число столбцов - C#
Всем здорова. подскажите ребят, как можно добавить в ячейку ну к примеру тот же &quot;DataGridViewCheckBoxCell&quot; во второй строке? В первой все...

В компонент TEdit ввести цену - Delphi
Добрый день Всем!!! Столкнулся с таковой проблемой, и не нашел ответа в инете. в программе есть поле Edit куда нужно максимально...

Крякозябры в файле журнала ошибок Windows - Windows 10
Приветствую! Возникла проблема со входом в windows 10 - при попытке восстановления загрузки, появляется сообщение, что восстановление при...

6
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   /// поток же уже закрыт, см пару строчек выше
/*...*/
}
0
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
12.04.2012, 08:01 #3
Цитата Сообщение от ugabuga Посмотреть сообщение
Суть дела : Ввести пользователю цену журнала меньшую,чем указаная в данных ( файле ).
Я лично вижу, что в обработке if (choise == 4) данные только читаются из файла. И все. Больше там ничего нет. Никакая цена нигде не корректируется.
0
ugabuga
1 / 1 / 0
Регистрация: 05.04.2012
Сообщений: 22
12.04.2012, 12:39  [ТС] #4
Ребята,что-то я со всем в печали...
Все тыкаюсь,брыкаюсь с этим кодом и без успешно! Там еще какая та тема пошла с самим файлом : если он пуст и ты его открываешь для чтения,то там выводятся какие-то значения ( 038888x9204399 ). Как это убрать и что вообще значят эти цифры?!
Может кто сможет код подкорректировать и выложить.
Буду очень благодарен!
0
IPtv
8 / 8 / 0
Регистрация: 10.04.2012
Сообщений: 34
12.04.2012, 17:50 #5
Цитата Сообщение от ugabuga Посмотреть сообщение
Ребята,что-то я со всем в печали...
... тема пошла с самим файлом : если он пуст и ты его открываешь для чтения,то там выводятся какие-то значения ( 038888x9204399 ). Как это убрать и что вообще значят эти цифры?!
...
проверяйте при чтении на eof(), примерно так же как на строчке 90 в первом посте. цифры - мусор, файл же пустой, откуда там взяться толковым данным.

Цитата Сообщение от ugabuga Посмотреть сообщение
Все тыкаюсь,брыкаюсь с этим кодом и без успешно!
хм, ну кто ж знает, что именно там у вас безуспешно, что комментировать не понятно. вы же уже пофиксили дублирование имён переменных в разных областях видимости?
0
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) !
0
Миниатюры
Ввести пользователю цену журнала меньшую, чем указанная в файле  
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()) и завершит цикл. (пользуйтесь пошаговым отладчиком, да).

удачи, в общем. если не добьёте сами (мелочь же осталась), вечером напишу код, ну или может кто ещё напишет
0
13.04.2012, 15:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.04.2012, 15:01
Привет! Вот еще темы с ответами:

Почему игрушечные машинки ускоряются быстрее чем реальные, но имеют меньшую максимальную скорость? - Физика
Здравствуйте, на сколько я понимаю, a = F/m и максимальной скорости тело достигнет когда его ускорение будет нейтрализовано возрастающим...

Определить, сколько строк файла имеют длину большую, равную, и меньшую, чем заданное значение k - Delphi
пусть дан текстовый файл.определите сколько строк файла имеют длину,большую,равную, и меньшую,чем заданное значение k

Определить, сколько строк файла имеют длину, большую, равную и меньшую, чем заданное значение k - C#
Здравствуйте, господа. Прошу помощи в следующей задаче: Пусть дан текстовый файл: 1. Определить, сколько строк файла имеют длину,...

Ввести название ноутбука и указать его цену - C#
Добрый день...помогите пожалуйста сделать задание. Ввести название ноутбука и указать его цену. Перечислить лицензионной программное...


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

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

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