Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.71
snyppimylt
8 / 8 / 5
Регистрация: 18.12.2011
Сообщений: 400
#1

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

23.09.2012, 19:02. Просмотров 4616. Ответов 3
Метки нет (Все метки)

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

Проверка на ввод символа
При вводе какого либо символа программа уходит в прострацию надо что бы...

Проверка на ввод символа
Пользователь вводит несколько строк (имя, фамилия и тд). Не могу сообразить как...

Ввод символа
char b; int c; puts(&quot;Int&quot;); scanf(&quot;%d&quot;, &amp;c); puts(&quot;Char&quot;); b =...

Ввод специального символа.
Всем привет. У меня вопрос про символ -  Decimal 26 HEX 1A ...

Пропускает ввод символа
Начал изучать с++ и в процессе выполнения наткнулся на проблему. В процессе...

Проверка вводимого символа
Привет.Помогите,надо сделать так ,чтобы в консольной программе при вводе...

3
alsav22
5438 / 4833 / 831
Регистрация: 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;
}
3
snyppimylt
8 / 8 / 5
Регистрация: 18.12.2011
Сообщений: 400
23.09.2012, 22:22  [ТС] #3
alsav22, огромное спасибо
0
User48
0 / 0 / 0
Регистрация: 28.10.2017
Сообщений: 3
09.06.2018, 12:00 #4
С int всё работает хорошо, пытался сделать проверку с double, курсор просит ввести значение ещё раз и так до тех пор пока не введёшь int. Подскажите в чём причина?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.06.2018, 12:00
Привет! Вот еще темы с решениями:

Проверка символа на повторяемость.
Всем здравствуйте! При разработке программы столкнулся с проблемкой. ...

Вопрос по ввод-вывод одного символа
//программа работает с английскими символами, с русскими - возникают проблемы...

Как отследить ввод символа в программу
Программа расчета площади поверхности и объема сферы,требуется ввод...

Ввод одного символа и строки с пробелом
Подскажите, пожалуйста, как принять от пользователя с клавиатуры лишь один...


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

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

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