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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 160, средняя оценка - 4.75
voff4igg
0 / 0 / 0
Регистрация: 15.02.2009
Сообщений: 11
17.02.2009, 03:54     Проверка ввода целого числа #1
Помогите разобраться, плиз... есть код:

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;
}
Как отловить ошибку ввода целочисленного числа максимально стандартными средствами? Можно ли это сделать не подключая другие библиотеки? Ищу самое простое решение... Заранее спасибо всем
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
17.02.2009, 11:11     Проверка ввода целого числа #2
Все что ты вводишь в консоли только потом с помощью обычных операций скрыто приводится к нужному тебе типу. Поэтому можешь сделать это сам, например, проверить, что введенная строка не содержит никаких запрещенных символов.
voff4igg
0 / 0 / 0
Регистрация: 15.02.2009
Сообщений: 11
17.02.2009, 15:09  [ТС]     Проверка ввода целого числа #3
Хорошо, а можно ещё вопрос... Вот такой вот код:
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, т.е. отловить ошибку ввода не представляется возможным... подскажите что-нибудь дельное пожалуйста
Юляшка
3 / 3 / 1
Регистрация: 14.12.2008
Сообщений: 30
18.02.2009, 22:15     Проверка ввода целого числа #4
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;
}
ммм...я не профи,поэтому объясни пожалуйста,что ты здесь делаешь?
Alexen
5 / 5 / 0
Регистрация: 14.11.2008
Сообщений: 77
18.02.2009, 23:07     Проверка ввода целого числа #5
так немножко проще:
Код
void main()
{


	 int input;

	 cout << "Введите число" << endl;
	 cin >> input;
	 if(!cin.fail())
	  cout << "Введено целое число: " << input << endl
			 << "Бит ошибки потока равен: " << cin.fail()<< endl;

	 else
	  cout <<"Введена кракозябра"<< " :)\n"
			 << "Бит ошибки потока равен: " << cin.fail() << endl;
}
voff4igg
0 / 0 / 0
Регистрация: 15.02.2009
Сообщений: 11
20.02.2009, 02:00  [ТС]     Проверка ввода целого числа #6
Цитата Сообщение от Юляшка Посмотреть сообщение
я не профи,поэтому объясни пожалуйста,что ты здесь делаешь?
Где именно тебе не понятно что я делаю?
Night_Light
17 / 17 / 2
Регистрация: 14.02.2009
Сообщений: 86
20.02.2009, 10:33     Проверка ввода целого числа #7
Цитата Сообщение от 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/reference/c...dlib/atoi.html
> If no valid conversion could be performed, a zero value is returned.
Поставь проверку на ноль результата вызова atoi(input).
Del_Piero_10
Smart is the new Sexy
24 / 24 / 1
Регистрация: 29.12.2008
Сообщений: 109
20.02.2009, 14:40     Проверка ввода целого числа #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
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 >> повторялся и символ снова пытался записатся и не мог, и цикл зацикливался. Чтобы очистить поток я использовал следующее:

Код
        cin.clear();
        _flushall();
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2010, 17:35     Проверка ввода целого числа
Еще ссылки по теме:

C++ Проверка правильности ввода числа
Проверка ввода двузначного числа C++
C++ Проверка на корректность ввода числа

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

Или воспользуйтесь поиском по форуму:
Chester
1 / 1 / 0
Регистрация: 04.12.2008
Сообщений: 5
05.10.2010, 17:35     Проверка ввода целого числа #9
Могу предложить такое решение проблемы первой задачи. У тебя цикл начинал зацикливатся, потому что поток был занят. Ты вводил неверный символ, и он оставался в потоке. Затем Cin >> повторялся и символ снова пытался записатся и не мог, и цикл зацикливался. Чтобы очистить поток я использовал следующее:

Код
        cin.clear();
        _flushall();
А не подскажете как такое же осуществить в JAVA?
Yandex
Объявления
05.10.2010, 17:35     Проверка ввода целого числа
Ответ Создать тему
Опции темы

Текущее время: 05:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru