Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C] Sparwadzanie błędów usera

Ostatnio zmodyfikowano 2014-04-08 10:50
Autor Wiadomość
kranki
Temat założony przez niniejszego użytkownika
[C] Sparwadzanie błędów usera
» 2014-04-07 14:44:32
Program ma pobierać od użytkownika wzrost i klasyfikować go niski średni wysoki i drukować komunikat. Z tym nie miałem problemu ale jeszcze muszę dodać sprawdzanie błędów. Próbuję funkcją isdigit jak wpiszę raz 1 literę to wyświetla właściwy komunikat przy drugim podaniu robi pętlę w nieskończoność. Jak dam 4 litery i więcej to też nie działa. Proszę o podpowiedzi wskazówki wytłumaczenie. Dziękuję z góry.

C/C++
void howmuch()

{
    char str[ 5 ];
   
    int hei, i, con;
   
   
    printf( "No ile masz cm wzrostu ?  \n " );
    scanf( "%d", & str );
   
    fgets( str, 5, stdin );
   
    //while (!isdigit(str[0]))
    for( i = 0; i < 6; i++ )
    {
       
       
        if( !isdigit( str[ 0 ] ) )
        {
           
            con = atoi( str );
            printf( "Wzrost podaj liczbami w cm ! :   \n " );
            scanf( "%d", & str );
        }
       
       
    }
   
   
    while( hei > 245 )
    {
        if( hei > 245 ) printf( "Nie przesadzaj, liczba jest za duża.  \n " );
       
        printf( "No ile masz cm wzrostu ?  \n " );
        scanf( "%d", & hei );
    }
    while( hei < 90 )
    {
        if( hei < 90 ) printf( "Jesteś większy...serio.  \n " );
       
        printf( "No ile masz cm wzrostu ?  \n " );
        scanf( "%d", & hei );
    }
   
    if( hei > 180 )
    {
        printf( "Jesteś wysoki \n " );
    }
    else
    {
        if( 180 > hei && hei > 160 )
        {
            printf( "Jesteś średni.  \n " );
        }
        else
        {
            printf( "Jesteś niski.  \n " );
        }
       
    }
}
 
P-107841
leon_w
» 2014-04-08 09:52:13
Na C się słabo znam, ale na pewno nie czyścisz bufora i/lub flagi błędów. Poszukaj na forum tego.
P-107887
alixir
» 2014-04-08 10:50:14
Najbliższy twojemu programowi działający przykład, mógłby wyglądać np. tak:

C/C++
int hei, i, wczytane_znaki;

bool blad = true;
printf( "No ile masz cm wzrostu ?\n " );

while( blad ) {
    wczytane_znaki = scanf( "%d", & hei );
   
    if( wczytane_znaki == 0 ) {
        printf( "Wzrost podaj liczbami w cm !\n " );
        scanf( "%*[^\n]" );
        continue;
    }
   
    if( hei > 245 ) {
        printf( "Nie przesadzaj, liczba jest za duża.\n " );
        printf( "No ile masz cm wzrostu ?\n " );
        continue;
    }
    else if( hei < 90 ) {
        printf( "Jesteś większy...serio.\n " );
        printf( "No ile masz cm wzrostu ?\n " );
        continue;
    }
    else {
        blad = false;
        if( hei > 180 )
             printf( "Jesteś wysoki.\n " );
        else
        if( 180 > hei && hei > 160 )
             printf( "Jesteś średni.\n " );
        else
             printf( "Jesteś niski.\n " );
       
    }
}
P-107891
« 1 »
  Strona 1 z 1