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 не нашел :(
вот тут у меня проблема появилась, в универе тесты пошли... задали написать прогу. о чем прога не столь важна, важно то что весь инпут от юзера должен быть проверен, то есть юзер не должен вводить букву или символ в поле куда нужно вводить только цифры!
попробовал "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 не нашел :(