• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Problem z odczytem pliku

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
851 wizyt
pytanie zadane 27 marca 2020 w C i C++ przez Hubert731 Obywatel (1,650 p.)

Nie wiem dlaczego, nie działa kod, kopiowalem nawet kod od Pana Mirosława z odc. 7 o odczytach i zapisach pliku.  Mianowicie chodzi mi o to, że plik zostaje odczytany, ale tylko pierwsze trzy linie, a dalej juz jest nieodczytywane.

#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

fstream plik;
string imie, nazwisko;
int nr_tel;

int main()
{
    plik.open("wizytowka.txt", ios::in);  
    if(plik.good()==false)   
    {
        cerr<<"Plik nie istnieje!";
        exit(0);
    }
    string linia;
    int nr_linii=1;

    while(getline(plik,linia))
    {
        switch(nr_linii)
        {
            case 1: imie=linia; break;
            case 2: nazwisko=linia; break;
            case 3: nr_tel=atoi(linia.c_str()); break;  

        nr_linii++;
    }

    plik.close();

    cout<<imie<<endl;
    cout<<nazwisko<<endl;
    cout<<nr_tel<<endl;




    return 0;
}

 

komentarz 27 marca 2020 przez tkz Nałogowiec (42,020 p.)
Dobrze kod skopiowałeś? Bo switch nie jest zamknięty.
komentarz 28 marca 2020 przez Hubert731 Obywatel (1,650 p.)
Racja, źle skopiowałem, w moim kodzie switch jest zamknięty i nie działa.

1 odpowiedź

0 głosów
odpowiedź 28 marca 2020 przez tangarr Mędrzec (155,140 p.)

Plik jest odczytywany od początku do końca, ale tylko pierwsze 3 linie są użyte.
Aby się o tym przekonać zmodyfikuj pętlę

    while(getline(plik,linia))
    {
        switch(nr_linii)
        {
            case 1: imie=linia; break;
            case 2: nazwisko=linia; break;
            case 3: nr_tel=atoi(linia.c_str()); break;
            default: 
                cout << "Linia nr: " << nr_linii <<" - " << linia;
        } // tutaj brakowało zamknięcia
        nr_linii++;
    }

 

komentarz 28 marca 2020 przez Hubert731 Obywatel (1,650 p.)

Przekształciłem trochę kod i pokazuje wszystkie linie, ale trzy pierwsze linie w pliku, program pokazuje jako ostatnie. Mógłby ktoś troszeczkę pomóc zrozumieć ten kod?

#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

                    

fstream plik;
string imie, nazwisko;
int nr_tel;

int main()
{
    plik.open("wizytowka.txt", ios::in);   

    if(plik.good()==false)   
    {
        cerr<<"Plik nie istnieje!";
        exit(0);
    }
    string linia;
    int nr_linii=1;

   while(getline(plik,linia))
{
    switch(nr_linii)
    {
        case 1: imie=linia; break;
        case 2: nazwisko=linia; break;
        case 3: nr_tel=atoi(linia.c_str()); break;
        default:
            cout <<  linia<<endl;
    }
    nr_linii++;
}

    plik.close();

    cout<<imie<<endl;
    cout<<nazwisko<<endl;
    cout<<nr_tel<<endl;



 

komentarz 28 marca 2020 przez tangarr Mędrzec (155,140 p.)

Pierwsze 3 linie pliku zapisujesz do zmiennych.
Pierwsza linia do zmiennej imie.
Druga linia do zmiennej nazwisko.
Trzecia linia do zmiennej nr_tel.
Kolejne linie są drukowane na ekran (przypadek default).
Pod koniec programu wypisujesz na ekran wartość zmiennych imie, nazwiko i nr_tel.

Powiedz co chcesz osiągnąć i czego w tym kodzie nie rozumiesz (konkretna linia kodu)

komentarz 28 marca 2020 przez Hubert731 Obywatel (1,650 p.)
edycja 28 marca 2020 przez Hubert731

Chcę, żeby pierwsze pokazały się pierwsze linie pliku.

Nie rozumiem tego switcha, przeciez nr_linii ma wartosc 1, wiec najpierw powinna zostac pobrana pierwsza linia pliku.

EDIT: Ok, przebudowałem switcha i działa, ale nadal nie rozumiem, jak program wczytuje te linie 3+.

 while(getline(plik,linia))
{
    switch(nr_linii)
    {
        case 1: imie=linia;
        {cout <<  linia<<endl; break;}
        case 2: nazwisko=linia;
        {cout <<  linia<<endl; break;}
        case 3: nr_tel=atoi(linia.c_str());
        {cout <<  linia<<endl; break;}
        default:
            cout <<  linia<<endl;
    }
    nr_linii++;
}

 

komentarz 28 marca 2020 przez tangarr Mędrzec (155,140 p.)
#include <iostream>
#include <fstream>
 
using namespace std;

int main()
{
    fstream plik;
    plik.open("wizytowka.txt", ios::in);  
    if(plik.good()==false) {
        cerr << "Plik nie istnieje!" << endl;
        return 1;
    }
    string linia; 
    while(getline(plik,linia)) {
        cout << linia << endl;
    }
    plik.close();
    return 0;
}

Ten kod pokaże wszystkie linie z pliku w odpowiedniej kolejności.

komentarz 28 marca 2020 przez Hubert731 Obywatel (1,650 p.)
Hmmm to fakt, w takim razie po co Pan Mirosław w odc 7 używał funkcji switch?
komentarz 28 marca 2020 przez tangarr Mędrzec (155,140 p.)
Nie wiem. Nigdy nie oglądałem jego video-kursów.
Podejrzewam, że w ten sposób chciał przedstawić działanie instrukcji switch.
komentarz 29 marca 2020 przez Hubert731 Obywatel (1,650 p.)

Switch było już przedstawione, no ale trudno, problem rozwiązany dziękuję za pomoc.

Tak z czystej ciekawości, w jaki sposób uczyłeś się programowania? laugh

komentarz 29 marca 2020 przez tangarr Mędrzec (155,140 p.)
Na początku kursy programowania z CD-Action. Próba zrozumienia Turbo Pascala.
Potem udało mi się znaleźć tutorial Xiona "Od zera do gier kodera". Czytanie o Windows API zupełnie mnie zniechęciło.
W liceum nauczycielka informatyki robiła mi zadania algorytmiczne.
Potem na studiach szybkie przerabianie różnych języków programowania (Turbo Pascal, C, C++, Java, D, Python). Kod który wtedy pisałem przypominał spagetti. Cały czas robiłem kopie kodu i prowadzałem drobne zmiany, kod zazwyczaj sprowadzał się do jednej długiej funkcji, przerabianej milion razy.
Tak naprawdę podstaw programowania nauczyłem się tworząc narzędzia wspomagające pracę w firmie rodziców. Najpierw pisałem w Javie. Potem odkryłem C#. Dopiero przy nim poczułem, że żyję. Bardzo spodobało mi się uzupełnianie składni dostarczane przez środowisko programistyczne.
Kolejną rewolucją było odkrycie biblioteki Qt4. Pozwoliło mi to wrócić do C++ i pisać programy okienkowe podobne do tych w C#.
To właśnie dzięki znajomości Qt znalazłem swoją pierwszą pracę, gdzie szlifowałem swoje umiejętności.
Żaden kurs czy szkolenie nie nauczy cię tak programowania jak prowadzenie jakiegoś projektu.

Podobne pytania

0 głosów
0 odpowiedzi 132 wizyt
0 głosów
0 odpowiedzi 211 wizyt

93,166 zapytań

142,177 odpowiedzi

321,946 komentarzy

62,495 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 688p. - dia-Chann
  2. 676p. - CC PL
  3. 675p. - Łukasz Piwowar
  4. 664p. - Marcin Putra
  5. 662p. - Łukasz Eckert
  6. 649p. - Michal Drewniak
  7. 641p. - rafalszastok
  8. 641p. - rucin93
  9. 629p. - Piotr Aleksandrowicz
  10. 629p. - Adrian Wieprzkowicz
  11. 621p. - Dawid128
  12. 612p. - Mikbac
  13. 611p. - ksalekk
  14. 606p. - Mariusz Fornal
  15. 602p. - Michał Telesz
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...