Напишу попонятнее.
Это программа на паскале.
var
i: integer;
begin
{$l-} //отключение дерективы компилятора, реагирующую на некорректный ввод — аварийным выходом
repeat
writeln('введите a');
read(a); //ввод а
until ioresult=0; /* если 1 то произошел некорректный ввод (буквы например) и будет предложено ввести значение снова */
{$l+}
end.
Мне нужна аналогия этого кода на С. Или хотябы служебная переменная, которая хранит в себе состоянее i/o.
А то при вводе буквы в численную переменную у меня зависает программа

. Может есть какой-то другой способ избежать зависания?
Здравствуйте, sima_two, Вы писали:
_>Мне нужна аналогия этого кода на С. Или хотябы служебная переменная, которая хранит в себе состоянее i/o.
_>А то при вводе буквы в численную переменную у меня зависает программа
. Может есть какой-то другой способ избежать зависания?
ИМХО стратегия такая: читаешь в любом случае строку (или символ), потом проверяешь, число ли это и если число, спокойно приводишь его к int (или что у тебя там) и вываливаешься возвращае число. Если не число, повторяешь вопрос. А директивы или переменной я что-то не припомню.
А еще лучше, покажи свой код на С/С++ и скажи где и при каких условиях виснет.
... << RSDN@Home 1.1.3 stable >>
Здравствуйте, Leshi, Вы писали:
L>Здравствуйте, sima_two, Вы писали:
_>>Мне нужна аналогия этого кода на С. Или хотябы служебная переменная, которая хранит в себе состоянее i/o.
_>>А то при вводе буквы в численную переменную у меня зависает программа
. Может есть какой-то другой способ избежать зависания?
L>ИМХО стратегия такая: читаешь в любом случае строку (или символ), потом проверяешь, число ли это и если число, спокойно приводишь его к int (или что у тебя там) и вываливаешься возвращае число. Если не число, повторяешь вопрос. А директивы или переменной я что-то не припомню.
L>А еще лучше, покажи свой код на С/С++ и скажи где и при каких условиях виснет.
Напиши пожалуйста кодом как ты проверишь число-ли это и как ты его корветнёшь в int.
Здравствуйте, 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