[C] Wyszukiwanie liczby w pliku

Libertarian
Użytkownik
Użytkownik
Posty: 49
Rejestracja: 14 lip 2013, o 12:40
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 7 razy
Pomógł: 1 raz

[C] Wyszukiwanie liczby w pliku

Post autor: Libertarian »

Program ma sprawdzic czy w pliku (liczby.txt) znajduje sie liczbna 2013.12 Program przedstawiony poniżej zawsze wyswietla Nie, niezależnie od tego czy liczba 2013.12 jest w pliku czy jej nie ma. Gdzie zrobiłem błąd?

Kod: Zaznacz cały

#include <stdio.h>

int main()
{
    FILE *plik;
    double liczba;
    int odp;
    odp=0;


plik=fopen("liczby.txt", "r");
if((plik=fopen("liczby.txt","r"))==NULL)
{
     printf ("Nie moge otworzyc pliku %s do odczytu!
", nazwa);
     return(-1);
     }

while(fscanf(plik,"%f",&liczba)==1)
{
if(liczba==2013.12)
{
   odp=1;
break;
}
}
if(odp==1)
printf("Tak
");
else
printf("Nie");
    return 0;
}
Ostatnio zmieniony 12 gru 2013, o 17:16 przez Afish, łącznie zmieniany 2 razy.
Powód: Poprawa wiadomości.Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
luka52
Użytkownik
Użytkownik
Posty: 8601
Rejestracja: 1 maja 2006, o 20:54
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 47 razy
Pomógł: 1816 razy

[C] Wyszukiwanie liczby w pliku

Post autor: luka52 »

Jest błąd zaokrąglania tej liczby.
Jak dodasz zaraz po wczytaniu linijkę: printf("%f
", liczba);
do wypisywania wczytanych liczb to zauważysz błąd. Możesz zmienić przyrównywanie np.: if(liczba == 2013.12f) (f na końcu liczby). Wtedy będzie ok. Choć głowy nie dam czy to najlepsze rozwiązanie
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C] Wyszukiwanie liczby w pliku

Post autor: Afish »

Liczby zmiennopozycyjne zwykło porównywać się z uwzględnieniem błędu dokładności, a nie przez operator ==.
Libertarian
Użytkownik
Użytkownik
Posty: 49
Rejestracja: 14 lip 2013, o 12:40
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 7 razy
Pomógł: 1 raz

[C] Wyszukiwanie liczby w pliku

Post autor: Libertarian »

luka52 pisze:Jest błąd zaokrąglania tej liczby.
Jak dodasz zaraz po wczytaniu linijkę: printf("%f
", liczba);
do wypisywania wczytanych liczb to zauważysz błąd. Możesz zmienić przyrównywanie np.: if(liczba == 2013.12f) (f na końcu liczby). Wtedy będzie ok. Choć głowy nie dam czy to najlepsze rozwiązanie
Dodałem f i nadal nie działa, sorry, ze mecze ale sredni ze mnie informatyk
luka52
Użytkownik
Użytkownik
Posty: 8601
Rejestracja: 1 maja 2006, o 20:54
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 47 razy
Pomógł: 1816 razy

[C] Wyszukiwanie liczby w pliku

Post autor: luka52 »

To zrób jak radzi Afish.
Np. dodaj math.h i zamień if'a na: if (fabs(liczba - 2013.12) < 0.00001).
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C] Wyszukiwanie liczby w pliku

Post autor: Afish »

Wczytujesz do zmiennej double tak:

Kod: Zaznacz cały

printf("%f
", liczba);
a powinieneś tak:

Kod: Zaznacz cały

printf("%lf
", liczba);
Pominę fakt, że załączony przez Ciebie kod się nie kompiluje :)
luka52
Użytkownik
Użytkownik
Posty: 8601
Rejestracja: 1 maja 2006, o 20:54
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 47 razy
Pomógł: 1816 razy

[C] Wyszukiwanie liczby w pliku

Post autor: luka52 »

Libertarian pisze:Dodałem f i nadal nie działa, sorry, ze mecze ale sredni ze mnie informatyk
A widzisz, bo ja w kodzie zmieniłem typ na float liczba;
ODPOWIEDZ