Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C++ - Program sprawdzający liczby w pliku

Werpet 09 Wrz 2016 14:09 921 4
  • #1 09 Wrz 2016 14:09
    Werpet
    Poziom 4  

    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
    Zaloguj się, aby zobaczyć kod

    0 4
  • #2 09 Wrz 2016 14:57
    JacekCz
    Poziom 36  

    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

    0
  • #3 09 Wrz 2016 15:25
    hasfar_antabolis
    Poziom 11  

    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.

    0
  • #4 09 Wrz 2016 15:54
    Jarosx9
    Poziom 35  

    Przydałaby się pętla do .. while.

    0
  • #5 12 Wrz 2016 16:31
    Tellen
    Poziom 3  

    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ć.

    0