logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

C++ - Program nie odczytuje liczb z pliku, zwraca puste pole

Werpet 09 Wrz 2016 14:09 1281 4
REKLAMA
  • #1 15921001
    Werpet
    Poziom 6  
    Posty: 37
    Ocena: 1
    Witam, piszę program, który sprawdza czy dana liczba jest zawarta w pliku. Próbowałem napisać do końca, ale program nie odczytywał niczego i zwracał puste pole.

    Struktura pliku:
    5
    67
    34
    74
    3

    kod:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 15921083
    JacekCz
    Poziom 42  
    Posty: 8670
    Pomógł: 760
    Ocena: 1461
    Z czego domniemujesz, że "nic nie wczytał"?

    Mi się wydaje, ze nie czytasz kodu który w tym okienku jest.
    Masz 7n linii kodu. Umiesz powiedzieć, co każda z nich robi? Wątpię.

    Mam prośbę. Myślę że wielu myśli podobnie: doprowadź w jednym swoim wątku do końca, że TWÓJ Kod działa
  • REKLAMA
  • #3 15921134
    hasfar_antabolis
    Poziom 12  
    Posty: 66
    Pomógł: 2
    Ocena: 18
    W tym kodzie odczytujesz dokładnie jedną liczbę - musisz wczytywać kolejno wszystkie w pętli i każdą z nich porównywać do tej wprowadzonej - jeśli porównanie wypadnie pozytywnie - wtedy wyświetlasz komunikat.
    Liczbę z klawiatury wczytujesz do zmiennej typu int, a liczbę z pliku odczytujesz do zmiennej typu tablica znaków, a aby porównać dwie zmienne muszą być takiego samego typu - dwa wyjścia, albo od razu wczytuj dane do zmiennych tego samego typu, albo którąś z nich konwertuj/rzutuj do "wspólnego" typu.
  • REKLAMA
  • #4 15921195
    Jarosx9
    Poziom 35  
    Posty: 2785
    Pomógł: 265
    Ocena: 400
    Przydałaby się pętla do .. while.
  • #5 15927042
    Tellen
    Poziom 8  
    Posty: 5
    W swoim kodzie dwa razy deklarujesz zmienną typu fstream o tej samej nazwie.
    "std::fstream plik;
    std::fstream plik( "liczba.txt", std::ios::in );"
    Po pierwsze, wspomniałeś, że chcesz tylko czytać liczby z pliku i nie chcesz ingerować w jego zawartość. Z tego tytułu proponowałbym utworzenie obiektu ifstream, który nie zezwala na zmiany w samym pliku.
    Po drugie, proponowałbym utworzyć obiekt tak jak w pierwszej linii, a później otworzyć go metodą .open(), której argumentami wywołania są kolejno nazwa otwieranego pliku, a później tryb otwarcia (std::ios::in do odczytu tak jak to zrobiłeś).
    Po trzecie, utworzyłeś nieodpowiedni kontener na dane. Jak sam stwierdziłeś, mają to być liczby - stąd nie rozumiem dlaczego utworzyłeś tablicę charów. Jeżeli mają to być liczby typu całkowitego, utwórz tablicę intów. Jeśli mają to być liczby typu zmiennegoprzecinkowego, utwórz tablicę floatów albo doubleów (w zależności od precyzji).
    Po czwarte, wywołujesz w nieodpowiedni sposób metodę getline(). Skoro mają to być tylko liczby, które nie są rozdzielone żadnym konkretnym delimiterem, proponowałbym skorzystać bezpośrednio z operatora >> na rzecz obiektu o nazwie. W tym rozwiązaniu mógłbyś w pętli czytać następne liczby, określając warunek końcowy jako napotkanie końca pliku. Jeżeli koniecznie chcesz skorzystać z metody getline(), to wyszukaj najpierw jakich argumentów oczekuje.

    Nie wspomnę o bezsensownych bibliotekach "conio.h" i "math.h", których tutaj nie wykorzystujesz. Nie wspominając nawet o wątpliwej jakości "conio.h", która nie powinna istnieć.
REKLAMA