Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2009, 11:20   #1
slips
Форумчанин
 
Аватар для slips
 
Регистрация: 28.10.2008
Сообщений: 350
По умолчанию проверить корректно ли введено целое число

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

Код:
char * str;
int lCorrect,lAccess=0;
while (lAccess==0)
  {
    cin >>str;
    if (atoi(str)!=0) 
      {
      cout <<"Вы ввели значение: " <<atoi(str) << endl;
      lCorrect=atoi(str);
      lAccess=1;
    }
    else
      cout <<"Значение введено неверно." << endl << "Повторите ввод ";
  }
Всё хорошо но atoi возвращает ноль всегда если введено не верно число.. а если я хотел ввести 0 то он и возвратит ноль.. не очень хорошая функция и ещё если например ввести 9554fdgdfg то она откинит fdgdfg и останеться 9554 что тоже не есть хорошо...)

потом решил через функцию isdigit()- но как только я её поставил в цикл.. одно неверное введённое число и цикл превращается в бесконечный..

Вообщем ребята если кто знает как нормально можно проверить.. подскажите пожалуйста..
slips вне форума Ответить с цитированием
Старый 20.04.2009, 12:06   #2
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

ты бы для str память выделил, что ли

может из за этого и проблемы?

Цитата:
а если я хотел ввести 0 то он и возвратит ноль..
можно сравнить с другим число напр -1
counter вне форума Ответить с цитированием
Старый 21.04.2009, 23:13   #3
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Код:
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
	int n;
	cin >> n;
	if (!cin || cin.peek() != '\n')
		cout << ":-(";
	else
		cout << ":-)";
	cin.clear();
	cin.ignore(numeric_limits<streamsize>::max(), '\n');
	cin.peek();
}
Somebody вне форума Ответить с цитированием
Старый 22.04.2009, 09:23   #4
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Я бы написал простенькую функцию (да, не люблю я ничего готового =)) ), которая проверяет код каждого введенного символа. Если он меньше или больше нужного (точные значения надо посмотреть в таблице), то введено не число.
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как записать, чтобы ячейка выдавала то же число, что введено в другой? abdumanon Microsoft Office Excel 6 09.04.2009 16:05
Перевести целое положительное десятичное число в шестнадцатеричное счисление Alfis Паскаль, Turbo Pascal, PascalABC.NET 3 28.12.2008 20:40
Задание на типовой расчет: Какое наибольшее целое число без знака может быть записано в N двоич.разрядах? Бубликова Фриланс 10 06.12.2008 10:35
Сколь угодно большое целое число 1nd1g0k1d Общие вопросы C/C++ 3 29.02.2008 18:15