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

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

Войти
Регистрация
Восстановить пароль
 
Destreee
0 / 0 / 0
Регистрация: 16.06.2012
Сообщений: 10
#1

std::cin & switch case - C++

17.06.2012, 18:49. Просмотров 1086. Ответов 8
Метки нет (Все метки)

Всем привет. Вообщем проблема такая:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
while(val) { 
 
int choice;
std::cin >> choice;
 
    switch(choice) {
    case 1:  break;
    case 2:  break;
    case 3:  break;
 
    default: std::cout << "Wrong Number, You can only choose 1,2 or 3." <<endl;
           val = false;
    }
}
....
Если ввожу букву , то цикл бесконечно выводит Wrong Number, You can only choose 1,2 or 3.
Поидее если вводить букву то int становится негативным числом, почему default не обрабатывает ее ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2012, 18:49     std::cin & switch case
Посмотрите здесь:

std::cin - C++
const int MAX = 256; int main() { char buf; std::cout&lt;&lt;(std::cin&gt;&gt;buf); return 0; } Я в консоли вижу странный вывод...

Switch default и cin - C++
Проблема в следующем: Если в case есть cin то после завершения кейса выбирается default, как избежать этого? int i; ...

Из scanf в std::cin - C++
Как тоже самое сделать с помощью std::cin? printf(&quot;Введите автора %d книги.\n&quot;,i+1); scanf(&quot;%31s &quot;,ar.author); ...

Очистка (блокировка) std::cin - C++
Здравствуйте. Такой вопрос. Программа отрисовывает в консоль поле раз в n секунд несколько раз подряд (что-то типа анимации). В течение...

Std:cin ввод нескольких значений - C++
Нужно ввести строку с параметром cin &gt;&gt; command; //ввели add_int 5 далее в command у нас остается add_int нужно...

std::cin Debug Access failed - C++
Решил начать программировать в visual studio 2012 и сразу наткнулся на какую-то непонятную ошибку вот код: #include &quot;stdafx.h&quot; ...

Локаль в std::cin.getline (вижуал с++) - C++
собственно выводит в консоль нормально, а вот после считывания с консоли в символьный массив попадают крокозябры: #include &quot;stdafx.h&quot; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,186
Завершенные тесты: 1
17.06.2012, 19:15     std::cin & switch case #2
Цитата Сообщение от Destreee Посмотреть сообщение
если вводить букву то int становится негативным числом,
Не так. При вводе числа буква считается разделителем, а поскольку впереди цифр не вводите,
то получается ноль.
Destreee
0 / 0 / 0
Регистрация: 16.06.2012
Сообщений: 10
17.06.2012, 19:22  [ТС]     std::cin & switch case #3
Есть идеи как решить проблему ?
Я сам проверял через std::cout что если ввести букву вместо цифры , выведет рандомное негативное число. У меня так по крайней мере.

Кстати а в чем может быть проблема ? Думаю дело тут не в логике, наверное я чегото недопонимаю..

ЗЫ: Собсно я пытаюсь сделать валидацию )))
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
17.06.2012, 19:40     std::cin & switch case #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
char choice;
std::cin >> choice;
 
    switch(choice) {
    case '1':
    case '2':
    case '3':
        break;
    default: std::cout << "Wrong Number, You can only choose 1,2 or 3." <<endl;
           val = false;
    }
}
Destreee
0 / 0 / 0
Регистрация: 16.06.2012
Сообщений: 10
17.06.2012, 19:54  [ТС]     std::cin & switch case #5
С чаром я знаю что будет работать, в моей ситуации нужен именно int. Других решений нету ? Подозреваю что это глюк cin'a
CyBOSSeR
Эксперт C++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
17.06.2012, 19:55     std::cin & switch case #6
А char в int преобразовать что мешает?
C++
1
int i = ch - '0';
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
17.06.2012, 20:30     std::cin & switch case #7
Цитата Сообщение от Destreee Посмотреть сообщение
Если ввожу букву , то цикл бесконечно выводит Wrong Number, You can only choose 1,2 or 3.
странно, у меня почему-то все ок.


Цитата Сообщение от Destreee Посмотреть сообщение
почему default не обрабатывает ее ?
Цитата Сообщение от Destreee Посмотреть сообщение
Если ввожу букву , то цикл бесконечно выводит Wrong Number, You can only choose 1,2 or 3.
вроде сами себе противоречите.
darkknight2008
62 / 62 / 6
Регистрация: 16.10.2011
Сообщений: 200
17.06.2012, 20:35     std::cin & switch case #8
Никаких глюков нету. Все работает как и должно. Когда поток ожидает ввода цифры, а ты вводишь букву, то внутри потока ввода возникает ошибка. Вот эту ошибку и нужно обработать.
Я себе сделал такую функцию:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
template< class T >
T inputNumber( CHAR *msg )
{
  BOOL inputFlag;
  T num;
  do
  {
    cout << msg;
    cin >> num;
    if (cin.fail() == TRUE)
    {
      cout << "Неверный ввод.\n";
      inputFlag = FALSE;
    }
    else
      inputFlag = TRUE;
 
    cin.clear(); // Очищаем список ошибок потока
    cin.ignore(1000, '\n'); // Очищаем буфер ввода
  } while (inputFlag == FALSE);
 
  return num;
}
msg - сообщение, которое будет запрашивать ввод.
А далее будет идти цикл пока мы не сделаем верный ввод.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2012, 21:08     std::cin & switch case
Еще ссылки по теме:

Std::cin, символ новой строки - C++
Подскажите, куда в данном примере после каждого cin'а девается символ новой строки? Насколько помню cin и cin.get его после себя оставляют...

Как исправить ошибку с std::cin - C++
помогите у меня пропускает последующие вводы если вводишь знак или букву вот код std::cout&lt;&lt;&quot;A: &quot;; std::cin&gt;&gt;AA; ...

Как выполнять std::cin в LOOP ? - C++
Хочу сделать что то вроде командной строки. 1ый раз читает и выполняет нормально, но следующий раз вижу что ждет от меня ввода, но ни...

Оператор std::cin выдает непредсказуемый результат - C++
Здравствуйте! Пожалуйста, укажите на мою ошибку! Вот собственно, задание: &quot;Напишите функцию, которая по двум объектам, price и weight,...

Как проигнорировать последовательность символов в std::cin? - C++
Есть два числа, разделенных последовательностью &quot;--:&quot;. Если бы это делалось при помощи sscanf: sscanf(input, &quot;%d--:-%d&quot;, &amp;a, &amp;b); ...


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

Или воспользуйтесь поиском по форуму:
Destreee
0 / 0 / 0
Регистрация: 16.06.2012
Сообщений: 10
17.06.2012, 21:08  [ТС]     std::cin & switch case #9
а так вот в чем проблема ) теперь ясно =)
to Zort: Я имел ввиду что обрабатывает не правильно.
Yandex
Объявления
17.06.2012, 21:08     std::cin & switch case
Ответ Создать тему
Опции темы

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