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

Sprawdzenie czy wczytano liczbę.

Ostatnio zmodyfikowano 2015-04-21 21:17
Autor Wiadomość
xazerty
Temat założony przez niniejszego użytkownika
Sprawdzenie czy wczytano liczbę.
» 2015-04-13 22:56:19
Witam.
Jaki warunek w języku C mogę użyć, aby sprawdzić, czy wprowadzono poprawnie liczbę do zmiennej.
Np.
C/C++
int main()
int a, b;
scanf( "%d %d", & a, & b );
//tutaj chciałbym wprowadzić właśnie ten warunek, żeby program sprawdził, czy wczytano liczby.
P-130856
pekfos
» 2015-04-13 23:09:17
Wartość zwracana ze scanf().
P-130857
Different
» 2015-04-13 23:10:00
Najpierw poszukaj odpowiedzi sam, to nie jest takie trudne ;)
http://lmgtfy.com/​?q=C+scanf+reference
http://lmgtfy.com/​?q=C+scanf+only+integer
P-130858
xazerty
Temat założony przez niniejszego użytkownika
» 2015-04-13 23:18:27
@pekfos Chodzi o EOF? Jeśli zwróci EOF to znaczy, że prawidłowo wczytano liczbę?(coś w stylu cin.good() z c++?) Dzięki za pomoc :)

Edit:

Zacząłem program który wczytuje do skutku, aż nie poda się właściwych danych. Mam jednak problem. Zacząłem robić to przez pętlę nieskończoną, ale po wprowadzeniu jakiejś litery zapętla sie w kółko printf("Podaj liczby") i printf("blad wczytywania"). Zaś gdy wpisze się liczbę jest w porządku. Co mogę teraz zrobić :d

C/C++
while( 1 )
{
    printf( "Podaj liczby" );
    k = scanf( "%d %d", & a, & b );
    if( k == 2 )
    {
       
        if( a == b )
        {
            printf( "Liczby sa rowne" );
        }
        else
        {
            break;
        }
    }
    else
    {
        printf( "blad wczytywania" );
    }
   
}
P-130860
Brunon3
» 2015-04-14 07:12:37
Chodzi o EOF? Jeśli zwróci EOF to znaczy, że prawidłowo wczytano liczbę?(coś w stylu cin.good() z c++?)

http://www.cplusplus.com​/reference/cstdio/scanf/

On success, the function returns the number of items of the argument list successfully filled. This count can match the expected number of items or be less (even zero) due to a matching failure, a reading error, or the reach of the end-of-file.

If a reading error happens or the end-of-file is reached while reading, the proper indicator is set (feof or ferror). And, if either happens before any data could be successfully read, EOF is returned.

If an encoding error happens interpreting wide characters, the function sets errno to EILSEQ.

No i zapomniałeś o znacznikach w poście wyżej ([cpp] kod [/cpp]).
P-130866
xazerty
Temat założony przez niniejszego użytkownika
» 2015-04-14 13:02:18
Problem rozwiązany zapomniałem całkowicie o czyszczeniu bufora, wystarczyło dodać fflush(stdin). Dziękuję wszystkim za pomoc :)
P-130877
Monika90
» 2015-04-14 13:51:27
fflush(stdin)
Co oczywiście ma niezdefiniowane zachowanie. Skąd to wziąłeś?
P-130878
xazerty
Temat założony przez niniejszego użytkownika
» 2015-04-21 21:17:18
Nie wiem skąd(ale kiedyś to gdzieś widziałem i zacząłem używać od tego czasu), ale zawsze pomaga w programach, gdy wczytuje się kilka zmiennych pod rząd. Z tego co wiem to czyści bufor ;p

ostatecznie kod programu wygladał tak:
C/C++
/* napisac funkcje pobierajaca 2 argumenty. zwraca 1 gdy jest wieksza od 2 i 0 w drugim przypadku .w main wczytujemy liczby
kiedy sa prawidlowymi liczbami albo sa sobie rowne w zaleznosci od wyniku dzialania funkcji wyswietli komunikat
liczba wartosc jest wieksza od lub mniejsza
*/
#include <stdio.h>

int wczytaj( int x, int y )
{
    return x > y;
}
int main()
{
    int a, b, k;
    while( 1 )
    {
        printf( "Podaj liczby" );
        k = scanf( "%d %d", & a, & b );
        fflush( stdin );
        if( k == 2 )
        {
           
            if( a == b )
            {
                printf( "Liczby sa rowne" );
            }
            else
            {
                break;
            }
        }
        else
        {
            printf( "blad wczytywania" );
        }
       
    }
    if( wczytaj( a, b ) == 1 )
    {
        printf( "pierwsza liczba jest wiêksza od drugiej" );
    }
    else
    {
        printf( "druga liczba jest wieksza od pierwszej" );
    }
}
P-131255
« 1 »
  Strona 1 z 1