Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Почему при вводе числа программа работает нормально, а при вводе буквы уходит в бесконечный цикл? - C++

13.02.2016, 14:43. Просмотров 560. Ответов 5
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void mainmenu()
{
cout << "Введи число" << endl;
cin >> choice;
if (choice == 1) {
cout << "Hello" << endl;
}
system("pause");
mainmenu();
}
int main()
{
setlocale(LC_ALL, "RUSSIAN");
mainmenu();
}
Есть часть кода. Если я ввожу цифру 1 - проигрывается действия условия if. Если ввожу любую цифру, кроме 1 - то просят ввести цифру заново. Но если я введу любую букву, то будет высвечиваться "Для продолжения введите любую клавишу..." до бесконечности. Что это такое и каким образом исправить?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.02.2016, 14:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему при вводе числа программа работает нормально, а при вводе буквы уходит в бесконечный цикл? (C++):

Объяснить почему при заполнении матрицы программа уходит в бесконечный цикл - C++
#include &lt;iostream&gt; using namespace std; int main() { int mas; for (int i = 0; i &lt; 3;) { for (int j = 0; j &lt; 4;j++) ...

Бесконечный цикл при вводе несоответствующего типа данных - C++
Цикл, который просит ввести пользователя число, если это число ни одно из чисел 1, 2 или 3, то цикл повторяется вновь, как только получаем...

Почему цикл на при 1 уходит в бесконечный цикл? - C++
#define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { int x=0, y=0,...

При вводе дробного числа происходит бесконечный ввод - C++
При вводе дробного числа происходит бесконечный ввод, а при вводе целого все ок. #include &lt;iostream&gt; using namespace std; ...

Почему при вводе элементов массива, программа прекращает работу или работает не так, как ожидается? - C++
При вводе элементов массива, программа прекращает работу или не правильно работает. Например если указать размер массива 10 , то ввод...

Передача массивов в функцию: почему программа уходит в бесконечный цикл? - C++
Всем здравствуйте, спасибо, что проявили к моей теме интерес. у меня вопрос и даже не один. для начала код, который работает, после...

5
Dreamer_0x01
254 / 81 / 27
Регистрация: 29.10.2015
Сообщений: 192
13.02.2016, 14:53 #2
1) А что такое choice, как и где она объявлена?
2) Потенциально опасное место - рекурсивный вызов maimenu. Стек вызовов в течение всей работы программы растет и не освобождается. Спустя какое-то время программа гарантированно свалится. Лучше делать вызов mainmenu() в цикле из main().
0
MuslimPalit
30 / 6 / 2
Регистрация: 23.03.2015
Сообщений: 508
13.02.2016, 15:00 #3
код низкого уровня! Ты входишь в цикл if(choise == 1) так как ты ввел эту переменную 1 условие повторяется бесконечно, должен быть выход(принудительный), если не меняется условие, вставь break. Если ты вводишь другую цифру функция повторяется, так как идет рекурсия, а условие не выполняется, потомучто не истинно. И если ты пишешь букву программа просто игнорирует, потому что надо задать тип. Лучше пересмотри: типы данных, функции, условия, циклы. Побдробнее их почитаешь будешь лучше видеть код

Добавлено через 3 минуты
Решение всех задач из учебника Стивена Прата
вот составленные правильно программы, рассмотри их код и поймешь чего не хватает
0
FrostDamage1488
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 3
13.02.2016, 15:15  [ТС] #4
choice - переменная типа int, объявленная заранее

Добавлено через 1 минуту
Если я ввожу 1, то повторяется не бесконечно. После очередного вызова mainmenu() мне нужно заново вводить значение choice. А принудительный выход мне и не нужен. У меня большая программа, в общем, и там наоборот нужно, чтобы после выполнения условия возвращало обратно в начало. Я сделал это так.
0
Dreamer_0x01
254 / 81 / 27
Регистрация: 29.10.2015
Сообщений: 192
13.02.2016, 16:07 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Понятно. Если cin ожидает int, а вы вводите другое - возникает ошибка потока, которую нужно либо проверять, либо обрабатывать.

Вот тут хорошие рассуждения на эту тему нашел:
http://www.linux.org.ru/forum/development/5305320

Добавлено через 2 минуты
Цитата Сообщение от FrostDamage1488 Посмотреть сообщение
У меня большая программа
А вот из-за этого тем более нужно избавиться от рекурсивного вызова.
Иначе, это бомба замедленного действия. Рекурсия всегда должна быть конечной. Если у вас она получается бесконечной - заменить ее на цикл.
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
setlocale(LC_ALL, "RUSSIAN");
while(1)
{
mainmenu();
}
}
 
//и из самой mainmenu() убрать рекурсивный вызов.
1
FrostDamage1488
0 / 0 / 0
Регистрация: 13.02.2016
Сообщений: 3
13.02.2016, 16:48  [ТС] #6
Тему можно закрыть. Дело было в том, что я вызывал функцию в функции, это и повлекло за собой бесконечный цикл. Нашел решение, чтобы не вылетало при написании буквы. Нужно изменить choice из int на char, тогда все отлично работает. Если нужно кому-то.
0
13.02.2016, 16:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.02.2016, 16:48
Привет! Вот еще темы с ответами:

Объяснить почему программа уходит в бесконечный цикл (связные списки) - C++
Всем привет. Собрал связанный список, он работает, но при вводе типа char, программа уходит в бесконечный цикл. Без данного типа...

Составить программу, которая при вводе символа с клавиатуры выво-дит "латинская буква" при вводе латинской буквы и "не латинская бук-ва" во всех остал - C++
Составить программу, которая при вводе символа с клавиатуры выво-дит &quot;латинская буква&quot; при вводе латинской буквы и &quot;не латинская бук-ва&quot;...

почему то при вводе числа не выдает сумму - C++
#include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;conio.h&quot; #include &quot;math.h&quot; #include &quot;locale.h&quot; #include &lt;windows.h&gt; using...

Кирилица отображается нормально при выводе из программы, но иероглифы при вводе в консоль - C++
Что надо подключить что бы в консоли писать русскими буквами? cin &gt;&gt; kol; cin &gt;&gt; x; cout &lt;&lt; &quot;У вас есть &quot; &lt;&lt; kol &lt;&lt; &quot; &quot; &lt;&lt; x; ...


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

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

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