защита ввода с клавиатуры №2
От: sima_two  
Дата: 25.03.05 15:19
Оценка:
Напишу попонятнее.
Это программа на паскале.
var
i: integer;
begin
{$l-} //отключение дерективы компилятора, реагирующую на некорректный ввод — аварийным выходом
repeat
writeln('введите a');
read(a); //ввод а
until ioresult=0; /* если 1 то произошел некорректный ввод (буквы например) и будет предложено ввести значение снова */
{$l+}
end.

Мне нужна аналогия этого кода на С. Или хотябы служебная переменная, которая хранит в себе состоянее i/o.
А то при вводе буквы в численную переменную у меня зависает программа . Может есть какой-то другой способ избежать зависания?
Re: защита ввода с клавиатуры №2
От: Leshi Россия  
Дата: 25.03.05 15:32
Оценка:
Здравствуйте, sima_two, Вы писали:

_>Мне нужна аналогия этого кода на С. Или хотябы служебная переменная, которая хранит в себе состоянее i/o.

_>А то при вводе буквы в численную переменную у меня зависает программа . Может есть какой-то другой способ избежать зависания?
ИМХО стратегия такая: читаешь в любом случае строку (или символ), потом проверяешь, число ли это и если число, спокойно приводишь его к int (или что у тебя там) и вываливаешься возвращае число. Если не число, повторяешь вопрос. А директивы или переменной я что-то не припомню.
А еще лучше, покажи свой код на С/С++ и скажи где и при каких условиях виснет.
... << RSDN@Home 1.1.3 stable >>
Re[2]: защита ввода с клавиатуры №2
От: sima_two  
Дата: 25.03.05 15:43
Оценка:
Здравствуйте, Leshi, Вы писали:

L>Здравствуйте, sima_two, Вы писали:


_>>Мне нужна аналогия этого кода на С. Или хотябы служебная переменная, которая хранит в себе состоянее i/o.

_>>А то при вводе буквы в численную переменную у меня зависает программа . Может есть какой-то другой способ избежать зависания?
L>ИМХО стратегия такая: читаешь в любом случае строку (или символ), потом проверяешь, число ли это и если число, спокойно приводишь его к int (или что у тебя там) и вываливаешься возвращае число. Если не число, повторяешь вопрос. А директивы или переменной я что-то не припомню.
L>А еще лучше, покажи свой код на С/С++ и скажи где и при каких условиях виснет.

Напиши пожалуйста кодом как ты проверишь число-ли это и как ты его корветнёшь в int.
Re[3]: защита ввода с клавиатуры №2
От: Leshi Россия  
Дата: 25.03.05 15:59
Оценка:
Здравствуйте, sima_two, Вы писали:

_>Напиши пожалуйста кодом как ты проверишь число-ли это и как ты его корветнёшь в int.


// Велосипед, но я не помню как это делается системой
bool is_digit(char * str)
{
    if (str)
    {
        while (*str)
        {
            if (*str<'0' && *str>'9')
                return false;
            str++;
        }
        return true;
    }
    return false;
}

//Конвертить в инт совсем просто
int i = atoi(str);

Кстати, тебе _DAle_ предложил хороший вариант здесь
Автор: _DAle_
Дата: 25.03.05
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.