Results 1 to 6 of 6
  1. Collapse Details
    Question To Prgramers (C)
    #1
    Default
    Доброго времени суток!

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

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

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

    очень замечательно! все работает и все проверяет! только вот загвоздка если юзер ввел не правельно мне нужно дать ему 2-ю, 3-ю..... нную попытку пока введет верно, соответственно делаю это все в while loop
    вот так:
    [code]#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();
    }[/code]

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

    нашел одно решение, но оно мне кажется не очень проффесиональным.
    если в int про сканировать букву/символ то в int сохраниться 7ми-значное число, таким образом сделав
    [code]
    if (input > 999999)
    {
    printf("пошел нафиг");
    }
    [/code]

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

  2. Collapse Details
    #2
    Default
    [quote=Archy;159625]
    но как то мне это решение не нравиться! может подскажите что еще можно придумать? в Google не нашел [/quote]

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

  3. Collapse Details
    #3
    Default
    Code:
    	int input;
    
    	printf("input: ");
    	while (scanf("%d", &input) != 1)
    	{
    		printf ("wrong input. try again.\n");
    		fflush(stdin);
    	}
    	printf("Exit");
    Reply With Quote
     

  4. Collapse Details
    #4
    Default
    да у нас тут полно прогеров! вспоминая ДФ каждый 2-й писал скрипты...

    [quote=grumman;159633]Переведись на гуманитарный!![/quote]
    зачем сразу оскорблять и рубить все начинания на корню?
    не такой уж я и дурак! и гуманитарий у меня вообщье не идет! не языки ни история... а вот с тех наукой всегда было не плохо! и в школе ездил на Олимпиады по Физики, Химии, Математики, экономики! а по истории имел трояк
    Reply With Quote
     

  5. Collapse Details
    #5
    Default
    вариантом проверки на "дигитальность" может быть регулярка типа "^\d+$"
    Reply With Quote
     

  6. Collapse Details
    #6
    Default
    pentagra посибки!
    проблема была в засраном буфере! терь все оки!
    Reply With Quote
     

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •