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

Wczytywanie z pliku

Object Storage Arubacloud
0 głosów
128 wizyt
pytanie zadane 6 lutego 2020 w C i C++ przez kaminie318 Bywalec (2,070 p.)

Witam.Mam problem z zadaniem.

Polska 56.321
Hiszpania 67.40
Wyspy Owcze 14.532
...
Japonia 101.213

Chodzi o wczytywanie następujących linijek z pliku, a następnie wypisanie państwa o największej liczbie mieszkańców na ekran.

komentarz 6 lutego 2020 przez niezalogowany
edycja 6 lutego 2020

//prawie gotowiec


#include <iostream>
#include <fstream>

using namespace std;

int main() {
    ifstream obj_fsteram("dane.txt");
    string string_temp, str;
    double double_temp;
    while(!obj_fsteram.eof()) {
        while (!(obj_fsteram>>double_temp)) {
            obj_fsteram.clear();
            obj_fsteram>>str;
            string_temp+=' '+str;
              str="";
        }
        cout<<double_temp<<string_temp<<endl;
        string_temp="";
        //if()
    }
// cout<<double_max<<string_max;
    obj_fsteram.close();

    return 0;
}

 

ale polecam linki poniżej i opus magnum

https://www.youtube.com/watch?v=h2Taf16gQDI

https://www.youtube.com/watch?v=hk5NYscSPHI&list=PL5jc9xFGsL8G3y3ywuFSvOuNm3GjBwdkb&index=17

edit::edytowałem aby nie udziwniać

1 odpowiedź

0 głosów
odpowiedź 6 lutego 2020 przez XxPPDKxX Obywatel (1,400 p.)
Hej masz już jakiś kod napisany? Wczytywałeś już pliki tekstowe?

Mógłbym ci dać gotowca ,ale się nic nie nauczysz z tego.

Możesz utworzyć sobie dwie zmienne jedna dla nazwy państwa a druga dla wartości.

Dodatkowo tworzysz dwie zmienne na nazwę państwa i liczbę mieszkańców (chodzi o te które ma najwięcej osób)

Następnie wczytujesz plik linia po linii aż napotkasz koniec pliku.

Za każdym razem wczytujesz dwie dane nazwa państwa i liczbę mieszkańców.

Możesz założyć na początek ,że pierwsze dane z pliku to państwo o największej liczbie mieszkańców.

Następnie za każdym wczytaniem kolejnych danych porównujesz czy liczba mieszkańców jest większa.

Jeżeli tak to zmieniasz zmienne.

Na koniec wypisujesz te zmienne.

Pokaż co już napisałeś to ci pomogę to poprawić :)
komentarz 6 lutego 2020 przez XxPPDKxX Obywatel (1,400 p.)

Poprawiłem kod wczytuję państwa które w nazwie mają więcej niż jeden człon.

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

void odczytajZPliku(std::fstream  &plik)
{
    std::string Panstwo;
    std::string PanstwoMax = "";
    std::string temp;
    float lbMieszkancow;
    float lbMieszkancowMax = 0;
    while (!plik.eof())
    {
        while (!(plik >> lbMieszkancow))
        {
            plik.clear();
            plik >> temp;
            Panstwo += temp + " ";
            temp = "";
        }
        if (lbMieszkancow > lbMieszkancowMax)
        {
            PanstwoMax = Panstwo;
            lbMieszkancowMax = lbMieszkancow;
        }
        Panstwo = "";
    }
    std::cout << "Najwiecej mieszkancow:\n" << PanstwoMax << lbMieszkancowMax << std::endl;
}

int main()
{
    std::fstream plik;
    plik.open("dane.txt", std::fstream::in);
    odczytajZPliku(plik);
    return 0;
}

Napisz czy wszystko rozumiesz z kodu jeżeli nie to powiedz co to ci wytłumaczę ;)

komentarz 6 lutego 2020 przez kaminie318 Bywalec (2,070 p.)
while (!(plik >> lbMieszkancow))
        {
            plik.clear();
            plik >> temp;
            Panstwo += temp + " ";
            temp = "";
        }
        if (lbMieszkancow > lbMieszkancowMax)
        {
            PanstwoMax = Panstwo;
            lbMieszkancowMax = lbMieszkancow;
        }
        Panstwo = "";

Ten fragment trochę nie jasny, reszta w porządku.

komentarz 7 lutego 2020 przez XxPPDKxX Obywatel (1,400 p.)
W pętli próbuje wczytać liczbę mieszkańców jeżeli nie uda się to czyści błędy po czym wczytuje to jako tekst (nazwę państwa) aż nie uda się wczytać liczby. Jest to dlatego że mogą być nazwy składające się z kilku członów wtedy sklejamy nazwę :)
komentarz 7 lutego 2020 przez kaminie318 Bywalec (2,070 p.)
edycja 7 lutego 2020 przez kaminie318

Nie mogę rozgryźć od plik>> temp. Co ma na celu zrobić "  " i "" w temp i państwo?

Dla jednoczłonowych wystarczyłoby to ?

void odczytajZPliku(std::fstream  &plik)
{
    std::string Panstwo;
    std::string PanstwoMax;
    float lbMieszkancow;
    float lbMieszkancowMax=0;
    while (!plik.eof())
    {
       plik>>Panstwo>>lbMieszkancow;
        if (lbMieszkancow > lbMieszkancowMax)
        {
            PanstwoMax = Panstwo;
            lbMieszkancowMax = lbMieszkancow;
        }
    }
    std::cout << "Najwiecej mieszkancow:\n" << PanstwoMax << lbMieszkancowMax << std::endl;
}

 

komentarz 7 lutego 2020 przez XxPPDKxX Obywatel (1,400 p.)
Jeżeli byś miał tylko jednczlonowe to owszem wystarczyło by tylko odczytać tekst a zaraz potem liczbę.

A ten zabieg z dopisaniem " " chodzi o to żeby rozdzialic człony bo inaczej byś miał WyspyOwcze bez spacji.

A samo temp = "" jest po to żeby przy następnym odczycie mieć pewność że nic nie zostanie po ostatnim.

Podobne pytania

0 głosów
1 odpowiedź 108 wizyt
0 głosów
1 odpowiedź 352 wizyt
+1 głos
3 odpowiedzi 1,471 wizyt

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 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!

...