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

Проверка ввода целого числа

17.02.2009, 03:54. Показов 48044. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите разобраться, плиз... есть код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
using std::endl;
using std::cout;
using std::cin;
 
void main()
{
int i;
cout << "Enter integer value" << endl;
cin >> i;
}
Как отловить ошибку ввода целочисленного числа максимально стандартными средствами? Можно ли это сделать не подключая другие библиотеки? Ищу самое простое решение... Заранее спасибо всем
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.02.2009, 03:54
Ответы с готовыми решениями:

Функции ввода целого числа и расчёт куба числа
Написать код программы, которая реализует 2 функции, в первой производится ввод целого числа, во второй производится расчёт куба этого...

Фильтр для ввода целого числа в данном диапазоне
# include &lt;iostream&gt; # include &lt;locale&gt; using namespace std; int main () { setlocale (LC_ALL,&quot;Russian&quot;); int number; ...

Исключения. Проверка на правильность введения целого числа
Надо сделать в программе несколько исключений. Одно из них должно срабатывать если вместо числа(int) будет введено число с точкой(float,...

8
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
17.02.2009, 11:11
Все что ты вводишь в консоли только потом с помощью обычных операций скрыто приводится к нужному тебе типу. Поэтому можешь сделать это сам, например, проверить, что введенная строка не содержит никаких запрещенных символов.
0
0 / 0 / 0
Регистрация: 15.02.2009
Сообщений: 11
17.02.2009, 15:09  [ТС]
Хорошо, а можно ещё вопрос... Вот такой вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int x;                            
bool success = false;
 
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
cout << "Введите значение" << endl; 
while(!success)
{
    cin >> x;        
    if(cin.good())
    {
        cout << "Вы ввели значение " << x << endl; 
        success = true;
    }
    else    
    {
        cout << "Значение введено неверно. Повторите ввод" << endl;
    }
}
Как бы его заставить нормально работать? После ввода неверного значения получается бесконечный цикл с выводом сообщения о невером значении... ума не приложу почему.

Подскажите, пожалуйста, в чем я не прав в этой программе

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
using namespace std;
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    char input[10];
    int value = INT_MIN;
    cout << "Введите число" << endl;
    cin >> input;
    value = atoi(input);
    cout << value << " " << errno << endl;
}
Проблема в том, что errno всегда 0, т.е. отловить ошибку ввода не представляется возможным... подскажите что-нибудь дельное пожалуйста
0
3 / 3 / 0
Регистрация: 14.12.2008
Сообщений: 30
18.02.2009, 22:15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
using namespace std;
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    char input[10];
    int value = INT_MIN;
    cout << "Введите число" << endl;
    cin >> input;
    value = atoi(input);
    cout << value << " " << errno << endl;
}
ммм...я не профи,поэтому объясни пожалуйста,что ты здесь делаешь?
0
6 / 6 / 1
Регистрация: 14.11.2008
Сообщений: 82
18.02.2009, 23:07
так немножко проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void main()
{
 
 
     int input;
 
     cout << "Введите число" << endl;
     cin >> input;
     if(!cin.fail())
      cout << "Введено целое число: " << input << endl
             << "Бит ошибки потока равен: " << cin.fail()<< endl;
 
     else
      cout <<"Введена кракозябра"<< " :)\n"
             << "Бит ошибки потока равен: " << cin.fail() << endl;
}
1
0 / 0 / 0
Регистрация: 15.02.2009
Сообщений: 11
20.02.2009, 02:00  [ТС]
Цитата Сообщение от Юляшка Посмотреть сообщение
я не профи,поэтому объясни пожалуйста,что ты здесь делаешь?
Где именно тебе не понятно что я делаю?
0
17 / 17 / 0
Регистрация: 14.02.2009
Сообщений: 86
20.02.2009, 10:33
Цитата Сообщение от voff4igg Посмотреть сообщение
Хорошо, а можно ещё вопрос... Вот такой вот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int x; 
bool success = false;
 
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
cout << "Введите значение" << endl; 
while(!success)
{
cin >> x; 
if(cin.good())
{
cout << "Вы ввели значение " << x << endl; 
success = true;
}
else 
{
cout << "Значение введено неверно. Повторите ввод" << endl;
}
}
Как бы его заставить нормально работать? После ввода неверного значения получается бесконечный цикл с выводом сообщения о невером значении... ума не приложу почему.

Подскажите, пожалуйста, в чем я не прав в этой программе

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
using namespace std;
 
void main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
 
char input[10];
int value = INT_MIN;
cout << "Введите число" << endl;
cin >> input;
value = atoi(input);
cout << value << " " << errno << endl;
}
Проблема в том, что errno всегда 0, т.е. отловить ошибку ввода не представляется возможным... подскажите что-нибудь дельное пожалуйста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
while(!success)
{
cin >> x; 
if(cin.good())
{
cout << "Вы ввели значение " << x << endl; 
success = true;
}
else 
{
cout << "Значение введено неверно. Повторите ввод" << endl;
}
}
попробуй присваивать false флагу success при неверном вводе

Добавлено через 9 минут 33 секунды
Цитата Сообщение от voff4igg Посмотреть сообщение

Подскажите, пожалуйста, в чем я не прав в этой программе

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <errno.h>
#include <stdio.h>
using namespace std;
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    char input[10];
    int value = INT_MIN;
    cout << "Введите число" << endl;
    cin >> input;
    value = atoi(input);
    cout << value << " " << errno << endl;
}
Проблема в том, что errno всегда 0, т.е. отловить ошибку ввода не представляется возможным... подскажите что-нибудь дельное пожалуйста
http://www.cplusplus.com/refer... /atoi.html
> If no valid conversion could be performed, a zero value is returned.
Поставь проверку на ноль результата вызова atoi(input).
0
Smart is the new Sexy
32 / 32 / 1
Регистрация: 29.12.2008
Сообщений: 109
20.02.2009, 14:40
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
#include <iostream>
using namespace std;
 
void main()
{
int x;                              
bool success = false;  
  
system("chcp 1251");  
  
cout << "Введите значение" << endl;   
while(!success)  
{  
    cin >> x ;          
    if(cin.good())  
    {  
        cout << "Вы ввели значение " << x << endl;   
        success = true;  
    }  
    else 
        cout << "Значение введено неверно. Повторите ввод" << endl; 
        cin.clear();
        _flushall();
} 
}
Могу предложить такое решение проблемы первой задачи. У тебя цикл начинал зацикливатся, потому что поток был занят. Ты вводил неверный символ, и он оставался в потоке. Затем Cin >> повторялся и символ снова пытался записатся и не мог, и цикл зацикливался. Чтобы очистить поток я использовал следующее:

Code
1
2
        cin.clear();
        _flushall();
3
1 / 1 / 0
Регистрация: 04.12.2008
Сообщений: 5
05.10.2010, 17:35
Могу предложить такое решение проблемы первой задачи. У тебя цикл начинал зацикливатся, потому что поток был занят. Ты вводил неверный символ, и он оставался в потоке. Затем Cin >> повторялся и символ снова пытался записатся и не мог, и цикл зацикливался. Чтобы очистить поток я использовал следующее:

Code
1
2
        cin.clear();
        _flushall();
А не подскажете как такое же осуществить в JAVA?
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.10.2010, 17:35
Помогаю со студенческими работами здесь

Составить программу ввода целого числа в диапазоне от 0 до 9 и печати его словесной формы
Добрый вечер! Помогите пожалуйста написать простенькую программу на с++ Не могу разобраться, может по вашему коду получится, заранее...

Проверка ввода числа на корректность
На отрицательность число проверил. Если ввожу отрицательное, то выводится сообщение: &quot;Вы ввели некорректное число, повторите...

Проверка правильности ввода числа
Здравствуйте. Помогите с функцией проверки ввода на число. Число любое (целое, дробное).

Проверка правильности ввода числа
Всем привет! Прошу помочь с такой задачей: Дано число в двоичной системе счисления. Проверить правильность ввода этого числа (в его...

Проверка на корректность ввода числа
Здравствуйте. Помогите решить данную проблему. Есть длинное число, хочу проверить, чтобы вводились только числа. Функция ввода: ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru