Проверить введенное число в С
От: m.victor  
Дата: 13.01.08 20:05
Оценка:
При вводе данных должен осуществляться контроль правильности ввода и удовлетворение заданному диапазону.
Как это можно реализовать?

Мои мысли по этому поводу.
Можно считать число в виде строки, просмотреть отдельный символ и сравнить на равенство с цифрой.
Мне кажется это не красивый способ, поэтому прошу о помощи!
Заранее благодарен!

14.01.08 15:35: Перенесено модератором из 'Этюды для программистов' — Кодт
Re: Проверить введенное число в С
От: deniok Россия  
Дата: 13.01.08 20:38
Оценка:
Здравствуйте, m.victor, Вы писали:

MV>При вводе данных должен осуществляться контроль правильности ввода и удовлетворение заданному диапазону.

MV>Как это можно реализовать?

Как вариант — перевести границы диапазона в строки и сравнивать лексикографически (a la strcmp). Не самое, наверно, эффективное, но довольно короткое решение.
Re: Проверить введенное число в С
От: Char_Int  
Дата: 13.01.08 20:51
Оценка:
Здравствуйте, m.victor, Вы писали:

MV>При вводе данных должен осуществляться контроль правильности ввода и удовлетворение заданному диапазону.

MV>Как это можно реализовать?

если не заморачиваться сильно то можно использовать atoi(); atol(); atof(); из srdlib
Re[2]: Проверить введенное число в С
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.01.08 23:09
Оценка:
Здравствуйте, deniok, Вы писали:

MV>>При вводе данных должен осуществляться контроль правильности ввода и удовлетворение заданному диапазону.

MV>>Как это можно реализовать?

D>Как вариант — перевести границы диапазона в строки и сравнивать лексикографически (a la strcmp). Не самое, наверно, эффективное, но довольно короткое решение.


А если пользователь введет 007?
Re: Проверить введенное число в С
От: Pzz Россия https://github.com/alexpevzner
Дата: 13.01.08 23:12
Оценка:
Здравствуйте, m.victor, Вы писали:

MV>Можно считать число в виде строки, просмотреть отдельный символ и сравнить на равенство с цифрой.

MV>Мне кажется это не красивый способ, поэтому прошу о помощи!

Смотря откуда ввести. В общем случае — ввести строку, распарсить, убедиться, что это именно число, а не, например, матерное слово, проверить диапазон, в случае ошибки вменяемо выругаться, чтобы пользователь понял, что именно от него хотят.

Если надо ввести именно цифру в интерактивной программе — ну например, можно нарисовать окошко с "клавиатурой" как у калькулятора.
Re: Проверить введенное число в С
От: loknalori Россия  
Дата: 14.01.08 07:13
Оценка:
Здравствуйте, m.victor, Вы писали:

MV>Заранее благодарен!


http://www.rsdn.ru/Forum/message/2395895.flat.aspx#2395895
Автор: loknalori
Дата: 06.03.07

+ см статью на эту тему в РСДН
Re: Проверить введенное число в С
От: Аноним  
Дата: 15.01.08 07:56
Оценка:
Здравствуйте, m.victor, Вы писали:

MV>При вводе данных должен осуществляться контроль правильности ввода и удовлетворение заданному диапазону.

MV>Как это можно реализовать?

MV>Мои мысли по этому поводу.

MV>Можно считать число в виде строки, просмотреть отдельный символ и сравнить на равенство с цифрой.
MV>Мне кажется это не красивый способ, поэтому прошу о помощи!
MV>Заранее благодарен!

для проверки на допустимые символы можно использовать функцию strspn
Re: Проверить введенное число в С
От: Astral29 Эстония  
Дата: 20.01.08 17:39
Оценка:
Здравствуйте, m.victor, Вы писали:

MV>При вводе данных должен осуществляться контроль правильности ввода и удовлетворение заданному диапазону.


В примитиве, если использовать только STL, то можно примерно так:


int main(int argc, char *argv[])
{
    istringstream iStream;
    string tmpStr;
    short num;

    while (true)
    {
        cout << "Enter number: ";
        cin >> tmpStr;
        iStream.str(tmpStr);

        try 
        {
            iStream >> num;
            if (!iStream)
            {
                iStream.ignore(static_cast<streamsize>(numeric_limits<int>::max()), '\n');
                iStream.clear();
                throw runtime_error("Wrong number or too big! Try again.");
            }
            else
                break;
        }
        catch (runtime_error err)
        {
            cout << err.what() << endl;
        }
    }

    if (iStream)
        cout << "The number is: " << num << endl;

    return EXIT_SUCCESS;
}


Ну, а проверку диапазона прикрутить не сложно, имея уже валидное число.

WBR, Алексей
Re: Проверить введенное число в С
От: skeptik_  
Дата: 21.01.08 01:52
Оценка:
Здравствуйте, m.victor, Вы писали:

MV>При вводе данных должен осуществляться контроль правильности ввода и удовлетворение заданному диапазону.

MV>Как это можно реализовать?

MV>Мои мысли по этому поводу.

MV>Можно считать число в виде строки, просмотреть отдельный символ и сравнить на равенство с цифрой.
MV>Мне кажется это не красивый способ, поэтому прошу о помощи!
MV>Заранее благодарен!
Что за проблемы вообще... Введённые в систему данные будут ведь как-то использоваться? Будут при этом преобразованы в числа, объекты, и т.д.? Ну так преобразуем и проверяем... boost::lexical_cast в помощь.
Re: Проверить введенное число в С
От: Kokoban  
Дата: 21.01.08 07:35
Оценка:
Здравствуйте, m.victor, Вы писали:

MV>При вводе данных должен осуществляться контроль правильности ввода и удовлетворение заданному диапазону.

MV>Как это можно реализовать?

MV>Мои мысли по этому поводу.

MV>Можно считать число в виде строки, просмотреть отдельный символ и сравнить на равенство с цифрой.
MV>Мне кажется это не красивый способ, поэтому прошу о помощи!
MV>Заранее благодарен!

1. считать число в виде строки
2. преобразовать строку в число: atoi(str)
3. проверки проводить с числом.
Re[2]: Проверить введенное число в С
От: loknalori Россия  
Дата: 21.01.08 07:51
Оценка:
Здравствуйте, Kokoban, Вы писали:

K>1. считать число в виде строки

K>2. преобразовать строку в число: atoi(str)
K>3. проверки проводить с числом.

А как в этом случае узнать, был ли изначально "0" или например "фавылопылавп"
Re: Проверить введенное число в С
От: superlexx  
Дата: 21.01.08 07:51
Оценка:
Прикольно, человек спрашивает о C, а ему отвечают бустом да STLом .

У atoi не ясно, было это число 0 или просто неправильный ввод, смотри лучше в сторону sscanf.
Re: Проверить введенное число в С
От: ДимДимыч Украина http://klug.org.ua
Дата: 21.01.08 10:26
Оценка:
Здравствуйте, m.victor, Вы писали:

MV>При вводе данных должен осуществляться контроль правильности ввода и удовлетворение заданному диапазону.

MV>Как это можно реализовать?

strtol(3)
Обязательно бахнем! И не раз. Весь мир в труху! Но потом. (ДМБ)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.