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

Не работает EOF (end-of-file) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Stallone
0 / 0 / 0
Регистрация: 08.07.2012
Сообщений: 46
22.12.2012, 22:18     Не работает EOF (end-of-file) #1
EOF (end-of-line) не работает в условии завершения цикла.
Вместо него работает -1.
Если ввести -1 то цикл прекрасно завершиться, но если ввести EOF (<ctrl> Z) то
цикл зависает и бесконечно выводит сообщения.

Вот задание:
Кликните здесь для просмотра всего текста

Торговый дом продает пять различных продуктов, розничная цена которых: продукт 1 — $2.98, продукт 2 — $4.50, продукт 3 — $9.98, продукт 4 — $4.49 и продукт 5 — $6.87. Напишите программу, которая читает последовательность пар чисел, означающих:

номер продукта;
количество, проданное за день.
Ваша программа должна использовать оператор switch, который помогает определить розничную цену каждого продукта. Программа должна рассчитать и вывести на экран общую розничную стоимость всех проданных за неделю продуктов.


Вот код:
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
class MyClass
{
public:
       MyClass();
       
       void input();
       void report();
private:
        double p1, p2, p3, p4, p5;
        double prp1, prp2, prp3, prp4, prp5;
   };


Кликните здесь для просмотра всего текста

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
#include "MyClass.h"
 
#include <iostream>
using namespace std;
 
#include <iomanip>
using namespace std;
 
MyClass::MyClass()
{
   p1 = 0;
   prp1 = 2.98;
   p2 = 0;
   prp2 = 4.50;
   p3 = 0;
   prp3 = 9.98;
   p4 = 0;
   prp4 = 4.49;
   p5 = 0;
   prp5 = 6.87;
   }
   
void MyClass::input()
{
   int nop, spd;
   
      cout << "Enter number of product use 1-5, or EOF to quit: ";
      cin >> nop;
      cout << endl;
   
   while( nop != EOF )
   {
      cout << "Enter sold per day: ";
      cin >> spd;
      
      switch( nop ){
         case 1:
            p1 += prp1 * spd;
            break;
            
         case 2:
            p2 += prp2 * spd;
            break;
         
         case 3:
            p3 += prp3 * spd;
            break;
            
         case 4:
            p4 += prp4 * spd;
            break;
            
         case 5:
            p5 += prp5 * spd;
            break;
         }
         
         cout << "Enter number of product use 1-5, or EOF to quit: ";
         cin >> nop;
      }
   }  
    
void MyClass::report()
{
   cout << "Solded at: " << p1 + p2 + p3 + p4 + p5 << endl;
   }

Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "MyClass.h"
 
#include <iostream>
using namespace std;
 
int main()
{
   MyClass myClass;
   
   myClass.input();
   myClass.report();
   
   system("pause");
   return 0;
   }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ZaMaZaN4iK
Мой лучший друг-отладчик!
 Аватар для ZaMaZaN4iK
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
23.12.2012, 00:24     Не работает EOF (end-of-file) #2
чтобы юзать EOF нужно подключить <cstdlib> или самому прописать #define EOF -1 - тогда всё заработает
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
23.12.2012, 10:53     Не работает EOF (end-of-file) #3
Цитата Сообщение от Stallone Посмотреть сообщение
если ввести EOF (<ctrl> Z) то
цикл зависает и бесконечно выводит сообщения.
Можно сразу же после цикла добавить вот это
C++
1
2
3
cin.clear();
while (cin.get() != '\n')
    continue;
не будет зависать
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
23.12.2012, 13:59     Не работает EOF (end-of-file) #4
Если ввод неудачен, то потоки не записывают EOF в переменную. Вместо этого ломается поток.
Поэтому используйте
C++
1
2
while (cin >> nop)
....
Yandex
Объявления
23.12.2012, 13:59     Не работает EOF (end-of-file)
Ответ Создать тему
Опции темы

Текущее время: 21:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru