Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 25.10.2023
Сообщений: 2

Циклическая проверка корректности ввода числа

25.10.2023, 18:33. Показов 1440. Ответов 6

Студворк — интернет-сервис помощи студентам
Добрый день. Прошу помощи. Не могу понять где затык. Программа должна проверять введённое пользователем число на то, что оно меньше 10000 и больше 0. Если условия не выполняются, просит повторно ввести корректное число. Цикл должен повторяться до бесконечности, пока оба условия не выполнятся. В случае неверного ответа выдаётся сообщение с указанием причины ошибки. Но если одно из условий не выполнилось, программа застревает на проверке этого условия, и какое-бы число вы не ввели, она будет повторять предыдущий результат проверки.

Например, первый раз ввели "20000", программа пишет: "Число не должно быть больше 10000", после этого просит снова ввести число, вводим "-5", вместо сообщения "Число не должно быть меньше 0" программа снова пишет "Число не должно быть больше 10000", вводим "5" (верный вариант), программа снова пишет тоже самое: "Число не должно быть больше 10000". Если вместо числа ввести какой-то иной символ (букву, например), программа сваливается в бесконечный цикл.

Заранее спасибо за помощь!

Код:

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream>
 
using namespace std; 
 
 
int main() {
cout << "Введи число" << endl;
int a;  
cin >> a; 
 
bool correctA = false;
 
while (correctA == false) {
 
if (a > 10000)
{
  cout << "Число не должно быть больше 10000" << endl;
  cout << "Введи число" << endl;
  int a;  
  cin >> a;   
 }
 
else if (a <= 0 )
{
  cout << "Число не должно быть меньше 0" << endl;
  cout << "Введи число" << endl;
  int a;  
  cin >> a;   
  } 
 
else 
{
   cout << "Корректное число" << endl;
   correctA = true;  
}
}
return 0; 
}
Добавлено через 3 минуты
Пока писал сообщение, понял в чём затык. Повторный ввод после неверного ответа не должен быть в теле цикла, но как его вынести корректно из него, не могу сообразить.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.10.2023, 18:33
Ответы с готовыми решениями:

Проверка корректности ввода
****Сразу извините, что заголовок на английском, при попытке написать по русски, вылетала ошибка.**** День добрый. Решил, что пора учить...

Проверка корректности ввода
Есть класс Point, в котором поля int X, int Y, int Z; (X должен быть больше Y) Есть конструктор без параметров Point::Point(){ cout...

Проверка корректности ввода чисел
считывается квадратная матрица с файла Как написать условие в коде,если после пробела идет не число то if(тут какое условие?) { ...

6
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
25.10.2023, 19:54
Цитата Сообщение от varloorni Посмотреть сообщение
Повторный ввод после неверного ответа не должен быть в теле цикла
Почему? В начало цикла ставь, а после проверяй.
0
97 / 73 / 27
Регистрация: 30.03.2023
Сообщений: 201
25.10.2023, 20:07
Лучший ответ Сообщение было отмечено varloorni как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
while (true) {
 
if (a > 10000)
{
  cout << "Число не должно быть больше 10000" << endl;
  cout << "Введи число" << endl;
 }
 
else if (a < 0 )
{
  cout << "Число не должно быть меньше 0" << endl;
  cout << "Введи число" << endl; 
} 
else 
{
   cout << "Корректное число" << endl;
   break; 
}
cin >> a;  
}
1
0 / 0 / 0
Регистрация: 25.10.2023
Сообщений: 2
25.10.2023, 20:42  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
while (true) {
 
if (a > 10000)
{
  cout << "Число не должно быть больше 10000" << endl;
  cout << "Введи число" << endl;
 }
 
else if (a < 0 )
{
  cout << "Число не должно быть меньше 0" << endl;
  cout << "Введи число" << endl; 
} 
else 
{
   cout << "Корректное число" << endl;
   break; 
}
cin >> a;  
}
Спасибо, вариант рабочий. Не совсем понял, правда, как работает конструкция while (true) . Или это короткий вариант записи while (correctA == true)?
0
И тут вот те нате
322 / 209 / 117
Регистрация: 12.07.2016
Сообщений: 555
25.10.2023, 21:01
Лучший ответ Сообщение было отмечено varloorni как решение

Решение

varloorni, у вас в начальном коде проблема только в том, что вы зачем-то в каждом if заново определяете int a;. В итоге оно экранирует переменную a, объявленную до цикла while, и значение вы вводите через cin для этой локальной переменной, которая уничтожается после выхода за скобки if{}, при этом в первой переменной a остается первое значение, которое вы считали до цикла.
1
97 / 73 / 27
Регистрация: 30.03.2023
Сообщений: 201
26.10.2023, 09:20
Цитата Сообщение от varloorni Посмотреть сообщение
Не совсем понял, правда, как работает конструкция while (true) . Или это короткий вариант записи while (correctA == true)?
Нет, это просто бесконечный цикл. А выход из него происходит по break. Мне, признаться, было лениво еще одну переменную указывать.
1
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
26.10.2023, 09:52
Цитата Сообщение от varloorni Посмотреть сообщение
короткий вариант записи while (correctA == true)
Синтаксис while:
C++
1
while(выражение возвращающее логическое значение true или false);
correcA УЖЕ имеет значение true или false и снова сравнивать его с true просто неприлично!
Нужно писать
C++
1
 while (correctA)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.10.2023, 09:52
Помогаю со студенческими работами здесь

Проверка корректности ввода фамилии инициалов
Нужно сделать полную проверку при вводе фамилии инициалов. Разрешаются только буквы, пробелы, две точки. Так же нужно, что бы фамилия и...

Циклическая проверка правильности ввода
Здравствуйте уважаемые кодеры, у меня и моего клешнерукого товарища появились довольно серьезные проблемы с данным кодом: #include...

Проверка корректности ввода для численных типов данных
Всем добрый вечер. Столкнулся с проблемой, когда ввожу число, его нужно проверить на корректность. Делаю это следующим образом. void...

Контроль корректности ввода числа
В консоли в поле (Enter The Yar: )вводя нужно вводить только цифры, если ввести случайно букву то на экране консоли мерцает (Enter The Yar:...

Проверка корректности числа
Здравствуйте. Запуталась с ифами в этой задачке, прошу помощи. Задачку нужно сделать через автомат Дано число. Требуется определить,...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru