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

Problem z odczytem pliku

Object Storage Arubacloud
0 głosów
531 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,000 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 (154,780 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 (154,780 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 (154,780 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 (154,780 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 (154,780 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 99 wizyt
0 głosów
0 odpowiedzi 138 wizyt

92,555 zapytań

141,402 odpowiedzi

319,541 komentarzy

61,939 pasjonatów

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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...