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

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

Войти
Регистрация
Восстановить пароль
 
 
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
#1

Очистка потока ввода && строки - C++

26.02.2013, 23:04. Просмотров 14890. Ответов 29
Метки нет (Все метки)

как вобще грамотно очистить поток после ввода множества всяких вещей с клавиатуры?
если совсем не чистить то остаются нажатия клавиши enter, если применять такой код
C++
1
2
3
cin.clear();
while(cin.get() != '\n');
cin.get();
в конце каждой функции в программе, где происходит ввод, то в итоге пользователю приходится 4-5 лишних раз давить enter после ввода чего либо, т.е. эффект обратный. как реализовать очистку потока вывода грамотно?

и еще, есть функция
C++
1
2
3
4
5
6
7
8
void initialize_values(goods *db)
{
    for (int i = 0; i < base_size; i++) {
        strcpy(db[i].value, '\0');
        db[i].cost = 0;
        db[i].quantity = 0;
    }
}
инициализирует массив записей при старте программы. в дальнейшем предполагается использовать db[i].value как критерий существования записи: если строка нулевая, то запись пустая и её можно заполнить. но у меня почему то не получается использовать if(!db[i].value) { ...........}, он просто не срабатывет. причем если value инициализировано как strcpy(db[i].value, '\0') ,то программа выдает просто segmentation vault и не работает, а если strcpy(db[i].value, "\0"), то компилируется без ошибок, но опять же if(!db[i].value) { ...........} не работает. в чем ошибка?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.02.2013, 23:04     Очистка потока ввода && строки
Посмотрите здесь:
Ошибка: multiple definition of `void std::swap<A>(A&amp;, A&amp;) C++
Цикл и строки, очистка потока ввода C++
C++ Почему friend ostrem& operator <<(ostream& outs, const Rational&); - invalid function declaration?
В заштрихованную фигуру бросают точки с координатами x и y. Получить координаты первой точки не попавшей в эту область (фигура x*x+y*y<25&&x*x+y*y>=9& C++
ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка? C++
функции && строки C++
C++ Порядок вычисления: операторы «|» и «||», «&» и «&&»
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vua72
28.02.2013, 01:49     Очистка потока ввода && строки
  #21

Не по теме:

все претензии к Прате

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
28.02.2013, 21:05  [ТС]     Очистка потока ввода && строки #22
Цитата Сообщение от xtorne21st Посмотреть сообщение
C++
1
#define CIN_FLUSH if (std::cin.peek()) std::cin.ignore()
объясните что это пожалуйста и как юзать и как работает, нужно просто добавить этот макрос или еще в коде вызывать что либо?

Добавлено через 29 минут
разобрался с макросом, да еще и ошибочку в коде нашел, там динамическая память не очищалась в одном месте. с таким макросом поприятнее, но для выхода все еще нужно ввести q и дважды нажать enter
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2013, 21:25     Очистка потока ввода && строки #23
12 пост прочли?
[WRG]
51 / 51 / 9
Регистрация: 20.11.2011
Сообщений: 243
Записей в блоге: 1
02.03.2013, 21:06  [ТС]     Очистка потока ввода && строки #24
благодарю, убрал и заработало!
sWINo_BACK_LAN
6 / 6 / 0
Регистрация: 30.03.2016
Сообщений: 27
29.11.2016, 17:57     Очистка потока ввода && строки #25
cin.sync();
game1progg
31 / 1 / 0
Регистрация: 07.01.2016
Сообщений: 41
27.01.2017, 05:41     Очистка потока ввода && строки #26
а как насчет:
C++
1
2
3
4
5
#include<algorithm>
 
void clean_screen(){
    system("cls");
}
keep_clear
0 / 0 / 0
Регистрация: 16.09.2015
Сообщений: 15
25.05.2017, 11:15     Очистка потока ввода && строки #27
Уходит в цикл "Bad".
Как избавиться от цикла и повторно ввести данные для проверки на int?
C++
1
2
3
4
5
6
7
8
9
10
11
int iNum;
int b = 0;
while (b == 0) {
  cin >> iNum;
  if(cin.get() == (int)'\n') {
    cout << "OK" << endl;
    b = 1; // exit
  } else {
    cout << "Bad" << endl;
  }
}
sWINo_BACK_LAN
6 / 6 / 0
Регистрация: 30.03.2016
Сообщений: 27
25.05.2017, 14:05     Очистка потока ввода && строки #28
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int iNum;
int b = 0;
while (b == 0) {
cin.sync();
  cin >> iNum;
cin.clear();
  if(cin.get() == (int)'\n') {
    cout << "OK" << endl;
    b = 1; // exit
  } else {
    cout << "Bad" << endl;
  }
}
вроде, так работает
keep_clear
0 / 0 / 0
Регистрация: 16.09.2015
Сообщений: 15
25.05.2017, 14:18     Очистка потока ввода && строки #29
MrGluck редактируя код, забыл закрыть цикл уайл.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2017, 14:19     Очистка потока ввода && строки
Еще ссылки по теме:
Friend ostream& operator<<(ostream& stream, CArr& obj); C++
Очистка потока ввода C++
Очистка потока ввода C++
Выделение памяти для буффера, под std::istream& operator>>(std::istream &, String &) C++
Телефонный справочник. Очистка потока ввода C++

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

Или воспользуйтесь поиском по форуму:
MrGluck
Модератор
Эксперт CЭксперт С++
6995 / 4166 / 594
Регистрация: 29.11.2010
Сообщений: 11,047
25.05.2017, 14:19     Очистка потока ввода && строки #30
Добавил, но } у вас не было. Это видно по логу изменений.
Yandex
Объявления
25.05.2017, 14:19     Очистка потока ввода && строки
Ответ Создать тему
Опции темы

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