PDA

View Full Version : Question To Prgramers (C)



Archy
26.11.2009, 02:26
Доброго времени суток!

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

попробовал "isdigit" из ctype.h библиотеке, не подходит!
т.к. там используется char, в которое сканиться значение и дальше проверяется была ли это цифра или букфа/символ, а у меня изначально "int" должен быть! а так же можно проверить число только с одной цифрой от 0 до 9! а если мне нужен 3х-значный номер? то оно уже не подходит т.к. проверит только первый номер из 3х цифр!

дальше... спросил у учительницы сегодня... она посоветовала такой вариант:
if ( scanf("%d", &input) == 1 )

очень замечательно! все работает и все проверяет! только вот загвоздка если юзер ввел не правельно мне нужно дать ему 2-ю, 3-ю..... нную попытку пока введет верно, соответственно делаю это все в while loop
вот так:

#include <conio.h>
#include <stdio.h>


main()
{

int input, correct;


do
{
printf("input: ");
if ( scanf("%d", &input) == 1 )
{
printf("true\n");
correct =1;
}
else
{
printf("false\n");
}
}
while (correct != 1);
printf("Exit");


getch();
}

но как только я в input ввожу букву, мой while loop просто крашиться и становиться бесконечным не взерая на то что по идее он должен остановиться опять на "scanf" стэйтменте...

нашел одно решение, но оно мне кажется не очень проффесиональным.
если в int про сканировать букву/символ то в int сохраниться 7ми-значное число, таким образом сделав


if (input > 999999)
{
printf("пошел нафиг");
}


но как то мне это решение не нравиться! может подскажите что еще можно придумать? в Google не нашел :(

grumman
26.11.2009, 09:42
но как то мне это решение не нравиться! может подскажите что еще можно придумать? в Google не нашел :(

Переведись на гуманитарный!!

pentagra
26.11.2009, 13:21
int input;

printf("input: ");
while (scanf("%d", &input) != 1)
{
printf ("wrong input. try again.\n");
fflush(stdin);
}
printf("Exit");

Archy
26.11.2009, 13:32
да у нас тут полно прогеров! вспоминая ДФ каждый 2-й писал скрипты...


Переведись на гуманитарный!!
зачем сразу оскорблять и рубить все начинания на корню?
не такой уж я и дурак! и гуманитарий у меня вообщье не идет! не языки ни история... а вот с тех наукой всегда было не плохо! и в школе ездил на Олимпиады по Физики, Химии, Математики, экономики! а по истории имел трояк :)

Aecid
26.11.2009, 14:29
вариантом проверки на "дигитальность" может быть регулярка типа "^\d+$"

Archy
26.11.2009, 23:39
pentagra посибки!
проблема была в засраном буфере! терь все оки!