Wczytywanie z pliku.

0

Witam mam takie zadanie.

Do tablicy T[n] (n – stała) rekordów o polach (miasto, godzina, minuta) wczytać dane z pliku „odjazdy.txt”, a następnie:

wydrukować dane o wszystkich odjazdach po godzinie 17:20
wydrukować nazwę miasta, do którego można odjechać najwcześniej (najmniejsza wartość godziny z odpowiadającą jej najmniejszą wartością minut)
wydrukować informację, do ilu miast można odjechać przed godziną 12:00.

Mam problem z wczytanie danych z pliku. Plik umieszczony jest w w tym samym katalogu co plik main.cpp
Oto kod:

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

using namespace std;

const int n = 5;

struct rozklad {
    string miasto;
    int godzina;
    int minuta;
};

int main() {

    rozklad t[n];
    int odjazdy_po_17 = 0;
    int odjazdy_przed_12 = 0;
    int licznik = 0;

    ifstream plk;
    plk.open("dane.txt");
    if (!plk.good()) {
        cout << "Porbelm z otwarciem pliku\n";
        return 1;
    }
    while (!plk.eof()) {
        for (int i = 0; i < n; i++) {
            plk >> t[i].miasto;
            plk >> t[i].godzina;
            plk >> t[i].minuta;
        }

    }

    for (int i = 0; i < n; i++) {
        cout << "miasto: " << t[i].miasto << "  godzina:  " << t[i].godzina << "  minuta:  " << t[i].minuta;
    }

    return 0;
}

niestety dla mnie nic się nie wczytuje.

Dane w pliku zapisane są następująco:
miasto
godzina
minuta
miasto
godzina
minuta
...
...
...

Podpowiecie co robię źle??

0

Podejrzewam, że masz jakiś błąd składniowy w pliku dane.txt. Na przykład zamiast zera jest gdzieś litera o.

0
ifstream plk("dane.txt");
if(plk)
{
    size_t cnt=0;
    while((cnt<n)&&(plk>>ws>t[cnt].miasto>>t[cnt].godzina>>t[cnt].minuta) ++cnt;
    for(size_t i=0;i<cnt;++i) cout<<"miasto: "<<t[i].miasto<<"; godzina: "<<t[i].godzina<<"; minuta: "<<t[i].minuta<<endl;
}
else
{
    cout<<"Porbelm z otwarciem pliku"<<endl;
    return 1;
}
0

Niestety ale to rozwiązanie nie pomogło. Ma ktoś jakiś pomysł jak rozwiązać ten problem.

0
TomaszLiMoon napisał(a):

Podejrzewam, że masz jakiś błąd składniowy w pliku dane.txt. Na przykład zamiast zera jest gdzieś litera o.

W pliku wszystkie dane są poprawnie wpisane.

2

use debugger, Luke

0

W pliku wszystkie dane są poprawnie wpisane

  1. Pokaż plik dane.txt.
  2. Co pojawia się w konsoli po uruchomieniu programu?
0

Debugger nic nie pokazuje.
Program się normalnie kompiluje, niestety okno konsolowe jest puste. Wiec albo nic się nie wczytuje z pliku albo co mniej prawdopodobne pętla for dla wypisania wyników wczytywania jest do bani.

screenshot-20200827213543.png

2
infinity100 napisał(a):

Debugger nic nie pokazuje.

Serio? Debuger się też popsuł? Weź zatrzymaj się w tej pętli i sprawdź ją krok po po kroku. Pewnie nieskończona ;)
Nie wiem po co ci ten while, skoro masz już for, który zaczyna zawsze od 0.

0
#include <iostream>
#include <iomanip>
#include <fstream>
#include <string>
using namespace std;

struct { string city; int h,m; } t[1000];
const size_t MaxCount=sizeof(t)/sizeof(*t);

int main()
{
    ifstream fin("C:\\APP\\Bcc\\Test\\data.txt");
    if(fin)
    {
        size_t cnt=0;
        while((cnt<MaxCount)&&(fin>>ws>>t[cnt].city>>t[cnt].h>>t[cnt].m)) ++cnt;
        for(size_t i=0;i<cnt;++i) cout<<setfill('0')<<setw(2)<<t[i].h<<':'<<setfill('0')<<setw(2)<<t[i].m<<'\t'<<t[i].city<<endl;
    }
    else
    {
        cout<<"Porbelm z otwarciem pliku"<<endl;
        return 1;
    }
    return 0;
}
C:\APP\Bcc\Test>type data.txt
Gdansk
15
30
Opole
10
20
Warszawa
13
00
Krakow
8
30
Poznan
20
00

C:\APP\Bcc\Test>rozklad_jazdy.exe
15:30   Gdansk
10:20   Opole
13:00   Warszawa
08:30   Krakow
20:00   Poznan

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0