Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
korneev
0 / 0 / 0
Регистрация: 10.09.2014
Сообщений: 12
1

Очистка буфера ввода при работе с cin

23.09.2014, 23:06. Просмотров 2078. Ответов 4
Метки нет (Все метки)

Добрый вечер! Пытаюсь научиться работать с классами, подскажите пожалуйста, что я делаю не так.
В частности не работает функция enter, полностью работающая в схожей программе со структурой.

C++ (Qt)
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
#include "stdafx.h"
#include <iostream>
#include <cctype> 
#include <cstring> 
#include <cstdlib> 
#include <cstddef>
 
using namespace std;
const int SIZE=5;
 
class sklad
{
char product[SIZE];
int cost [SIZE];
int number [SIZE];
int section [SIZE];
public:
    sklad()
      {for (int i=0;i<SIZE;i++)
        product[i]='/0';
      }
 
    void enter()
      {
       int i;       
       for (i=0; i<SIZE; i++)    
          if (!product[i]) break;      
       if (i==SIZE) {
          cout<<"Spisok polon\n";           
          return;}       
       input (i);  
      }
 
    void input(int i)
      {
       cout << "Product: ";  
         cin >> product[i];
       cout << "Cost: ";         
         cin >> cost[i];  
       cout << "Number: ";         
         cin >> number[i];  
       cout << "Section: ";         
         cin >> section[i];  
       cout << '\n';
      }
 
    void update ()  
      {
       int i;      
       char name[SIZE];        
       cout << "Product: ";      
        cin >> name;       
       for (i=0; i<SIZE; i++)     
       if (!strcmp(name, &product[i])) break;      
       if (i==SIZE) 
          {cout << "Tovar not found" << '\n'; 
           return;}      
       cout << "Input new information"<<'\n';       
       input(i);             
      } 
 
    void display ()   
      {int i;        
       for (i=0; i<SIZE; i++)        
          {if (product[i])            
             {cout << "Product: ";             
              cout << product[i] << '\n';           
              cout << "Cost: " << cost[i] << '\n'; 
              cout << "Number: " << number[i] << '\n';
              cout << "Section: " << section[i] << '\n';         
              cout << "--------------------------------------------------------------------------------" << '\n';           
             }          
          }    
       } 
 
    void sum ()
       {
        int i,j,sum=0;
        cout << "Input number of section: ";
         cin >> i;
        for (j=0;j<SIZE;j++)
           if (i==section[j])
              sum=sum+cost[j];
        cout << "Sum cost of section are " << sum << '\n';
       }
};
int menu();
 
int main()
{
sklad myobj;
char choise;          
for (;;)     
  {choise = menu();      
   switch(choise)        
    {case 'e': myobj.enter(); break;       
     case 'u': myobj.update(); break;         
     case 'd': myobj.display(); break; 
     case 's': myobj.sum(); break;
     case 'q': return 0;        
    }     
   }  
}
 
int menu()    
{
 char ch;         
 cout << '\n';        
 do        {
     cout << "(E)nter\n";            
     cout << "(U)pdate\n";          
     cout << "(D)isplay\n";
     cout << "(S)um\n";
     cout << "(Q)uit\n" << '\n';           
     cout << "Your choise: ";            
     cin >> ch;       
             }      
while (!strchr("eduqs",tolower(ch))); 
system ("cls");
return tolower(ch);     
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2014, 23:06
Ответы с готовыми решениями:

Очистка всего буфера ввода (cin)
Предположим у нас есть клиентское приложение, которое ожидает сообщение от сервера. При получении...

Поток ввода cin и его очистка(?)
Есть необходимость заполнять поля члены класса в консоли через ввод. Есть следующий отдельный...

Запись в файл, очистка буфера ввода
Есть программа записи в файл некоторой информации; фио студента, оценка за экзамен и т.д....

Не работает cin.getline при считывании строки большей буфера
Доброго всем времени суток!:) Проблема состоит в том, что если ввести 4 и более символов...

4
Справлюсь
67 / 27 / 16
Регистрация: 24.07.2014
Сообщений: 240
23.09.2014, 23:16 2
может не
Цитата Сообщение от korneev Посмотреть сообщение
C++
1
2
3
4
if (i==SIZE) {
* * * * * cout<<"Spisok polon\n"; * * * * * 
* * * * * return;} * * * 
* * * *input (i);
а
C++
1
2
3
4
if (i==SIZE) {
* * * * * cout<<"Spisok polon\n"; * * * * * 
* * * * * return;} else{* * * 
* * * *input (i);}
0
korneev
0 / 0 / 0
Регистрация: 10.09.2014
Сообщений: 12
23.09.2014, 23:22  [ТС] 3
По сути это ничего не меняет. Я на всякий случай попробовал, но результат тот же
0
KOPOJI
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16807 / 6687 / 877
Регистрация: 12.06.2012
Сообщений: 19,959
Завершенные тесты: 1
23.09.2014, 23:40 4
Цитата Сообщение от korneev Посмотреть сообщение
C++
1
2
3
4
sklad()
      {for (int i=0;i<SIZE;i++)
        product[i]='/0';
      }
что за "символ" вы пытаетесь туда внести? Терминальный нуль? Тогда вы слэш перепутали.. Собственно, это и есть вся ошибка.

Не по теме:

З.Ы. научитесь нормально форматировать код, читать практически невозможно %-)



Добавлено через 2 минуты
И да, вы точно хотели
C
1
char product[SIZE];
а не, к примеру,
C++
1
std::string product[SIZE];
или
C
1
char product[SIZE][N]; //где N - количество символов в названии продукта
?
1
korneev
0 / 0 / 0
Регистрация: 10.09.2014
Сообщений: 12
23.09.2014, 23:57  [ТС] 5
Со слэшэм понял, все получилось, [N] также добавил, работает. Спасибо большое!
Проблема теперь возникла с тем, что осмысленно записывается только одна запись, в остальных мусор.

P.S.Замечание по форматированию кода учту
0
23.09.2014, 23:57
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2014, 23:57

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Ошибка при работе с cin и cout
Здравствуйте, задам детский вопрос: почему не работает? int d; cout &lt;&lt; &quot;Введите значение числа...

Защита от дурака при вводе текста с помощью: cin.get cin.clear cin.sync
Доброго времени суток. На С++ учусь с недавних пор. Имеется стандартная &quot;защита от дурака&quot; на ввод....

Работа с cin при считывании с потока ввода
есть кусочек кода while (1) { string buf = name; cout &lt;&lt; &quot;Message : &quot;; string...

При работе начинаются притормаживания (нужна очистка памяти?)
Удачных суток. Встретился с проблемой. Есть функция, предположим: int zuzu(){ short bf;...


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

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

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