Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Как проверить что пользователь ввел целое число

Автор: Cherep87
Дата сообщения: 17.04.2008 23:30
возникла проблема, когда вместо целого числа вводишь буквы программа слетает.
Как осуществить проверку - ввел пользователь число или нет?
Автор: Cheery
Дата сообщения: 17.04.2008 23:32
Cherep87
какая программа? какой язык? вы же не с телепатами общаетесь.
Автор: Cherep87
Дата сообщения: 17.04.2008 23:41
язык С++;
а программа просто предлагает пользователю ввести целое число и потом переводит это число из десятичной системы в двоичную
Автор: Cheery
Дата сообщения: 18.04.2008 00:02
Под Visual C++

Код: using namespace System;
int main()
{
String^ str = "non-numeric";
Console::WriteLine( Char::IsNumber( '8' ) ); // Output: "True"
Console::WriteLine( Char::IsNumber( str, 3 ) ); // Output: "False"
}
Автор: shavarsh
Дата сообщения: 18.04.2008 08:53

Код:
#include <boost/lexical_cast.hpp>

...

int main()
{
using boost::lexical_cast;
using boost::bad_lexical_cast;

int i;
std::string s = "123";

try{
i = lexical_cast<int>(s);
}
catch(bad_lexical_cast & )
{
//s - не число
return 1;
}

//s - число
++i; // ок i = 124;

}
Автор: c0d3r
Дата сообщения: 18.04.2008 09:40
Вот (на мой взгляд) самый простой и чисто С++-шный вариант решения -- проверять cin.fail():

http://forum.ru-board.com/topic.cgi?forum=33&topic=4338&start=3100#1
Автор: Cherep87
Дата сообщения: 18.04.2008 12:14
to Cheery
первый вариант не подошел, у меня компилятор древний,
про второй с использованием строки и функции isdigit() тоже примерно думал так делать.

с третим вариантом - не понимаю как целому числу присваивать строку ( int sInput = "";) - выбивает ошибку, и еще одну ошибку когда пытаешся это число сделать аргументом функции ( IsNumeric(sInput); )

to shavarsh
не до конца понял, что делает программа..
а насчет isdigit() -то можно в цикле проверить каждый символ является ли этот символ числом или нет

to c0d3r -

Спасибо!
нашел сылку где про cin.fail() говорится ( http://www.math.rsu.ru/mexmat/miks/IT2/25_C++IOStreams.html )
вот нужный алгоритм
int i;
cin >> i;
while (cin.fail())
// необходимо очистить признак ошибки в потоке
{
cin.clear(); // очистить ошибочное состояние потока
cin.ignore(); // пропуск одного символа в потоке // или cin >> s, где s - строка
cin >> i;
}
Автор: shavarsh
Дата сообщения: 18.04.2008 21:26
Да, с cin.fail() неплохо получилось


Цитата:
не до конца понял, что делает программа

Просто из потока (я просто так присвоил для наглядности) мы сначала считываем в обычную строку, а потом проверяем можно ли её преобразовать в чило.


Код:
try{
i = lexical_cast<int>(s);
}

Страницы: 1

Предыдущая тема: Максимизированные окна MDI


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.