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

Проверка на ввод символа - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.71
snyppimylt
 Аватар для snyppimylt
7 / 7 / 1
Регистрация: 18.12.2011
Сообщений: 400
23.09.2012, 19:02     Проверка на ввод символа #1
Предположим вместо числа был введен символ, тогда после ввода символа пропускается вторая строчка cin>>b; и далее заного перезапускается начальная функция main(); и так она будет постоянно, почему так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int main(){
int a,b;
cout<<"Ввод числа" \\ а если пользователь ввел символ? то как поступить? 
cin>>a; 
cin>>b; \\ или надо ввести 2 числа в разные переменные.
 
main();
 
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.09.2012, 19:02     Проверка на ввод символа
Посмотрите здесь:

C++ как отследить ввод символа в языке С
Ввод символа в переменную типа INT C++
C++ Ввод специального символа.
Проверка символа на повторяемость. C++
C++ Вопрос по ввод-вывод одного символа
Проверка на ввод символа C++
пропускает ввод символа C++
Проверка на ввод символа C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.09.2012, 20:20     Проверка на ввод символа #2
После cin >> поставьте эту конструкцию:
C++
1
2
cin.clear();
while (cin.get() != '\n');
Добавлено через 8 минут
Цитата Сообщение от snyppimylt Посмотреть сообщение
почему так?
Если первым идёт не то, что cin >> ожидает (например символ буквы, когда ожидается число), то cin устанавливает флаг ошибки, и дальнейшая работа с потоком ввода становится невозможной. То что не ввелось, остаётся в потоке ввода. cin.clear(); сбрасывает флаг ошибки, а cin.get(), в цикле while(), будет извлекать символы из потока ввода, пока не встретит символ новой строки - '\n' (попадает в поток при нажатии Enter), извлечёт и его. Таким образом, поток ввода очистится и с ним снова можно будет работать.

Добавлено через 13 минут
Обыгрывать такие ситуации можно, например, так:
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
#include <windows.h>
#include <cstdlib>
#include <iostream>
using namespace std;
 
int main()
{ 
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
 
int a;
cout << "Введите число "; 
while (!(cin >> a))
{
    cin.clear();
    while (cin.get() != '\n');
    cout << "Неверный ввод. Повторите." << endl;
    cout <<"Введите число "; 
} 
cout << a << endl;
 
system("pause");
return 0;
}
snyppimylt
 Аватар для snyppimylt
7 / 7 / 1
Регистрация: 18.12.2011
Сообщений: 400
23.09.2012, 22:22  [ТС]     Проверка на ввод символа #3
alsav22, огромное спасибо
Yandex
Объявления
23.09.2012, 22:22     Проверка на ввод символа
Ответ Создать тему
Опции темы

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