Skocz do zawartości

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

g00ras

[C++] Zawieszający się program

Rekomendowane odpowiedzi


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

using namespace std;

int i;

struct dane
{
    char country[30];
    char capital[30];
    float area;
    int population;
};

dane dl[43];


int main()
{
    char w='t';
    int a;
    fstream plik;

        while(w=='t')
        {
            cout<<"Wybierz funkcje: "<<endl<<endl;
            cout<<"1.Wczytaj plik do tablicy struktur"<<endl;
            cout<<"2.Wyswietl zawartosc tablicy"<<endl;
            cout<<"3.Wyswietl panstwa z najwieksza i najmniejsza liczba ludnosci"<<endl;
            cout<<"4.Wyswietl panstwa z najwieksza i najmniejsza powierzchnia"<<endl;

    cin>>a;
    switch(a)
        {
            case 1:
                {
                    plik.open("/Users/Tomek/Desktop/europa.csv", ios::in);
                if(!plik)
                    cout << "Nie można otworzyc pliku!" << endl;

                for (i = 0; i < 43; i ++)
                {
                    plik.getline(dl[i].country, 40, ' ');
                    plik.getline(dl[i].capital, 40, ' ');
                    plik >> dl[i].area;
                    plik >> dl[i].population;
                }
                    plik.close();

                    break;
                }
            case 2:
                {
                    cout << "Panstwo|Stolica|Powierzchnia|Populacja" <<endl<<endl;

                for(i = 0; i < 43; i ++)
                {
                    cout << dl[i].country << ' ' << dl[i].capital << ' ' << dl[i].area << ' ' << dl[i].population;
                }
                cout << endl;

                    break;
                }
            case 3:
                {
                     int max1, min1, i, f, g;
                max1 = dl[i].population;
                min1 = dl[i].population;
                for (i = 0; i < 43; i++)
                    if (max1 < dl[i].population)
                    {
                        max1 = dl[i].population;
                        f = i;
                    }
                for (i = 0; i < 43; i++)
                    if (min1 > dl[i].population)
                        g = i;
                cout << "Panstwo z liczba ludnosci najmniejsza: " << dl[g].country << " - " << dl[g].population << " i najwieksza: "<< dl[f].country << " - " << max1 << endl;


                    break;
                }
            case 4:
                {
                              int j, c, d, max;
                double min;
                max = dl[j].area;
                min = dl[j].area;
                for (j = 0; j < 43; j++)
                    if (max < dl[j].area)
                    {
                        max = dl[j].area;
                        c = j;
                    }
                for (j = 0; j < 43; j++)
                    if (min > dl[j].area)
                    {
                        min = dl[j].area;
                        d = j;
                    }
                cout << "Panstwo z powierzchnia najmniejsza: " << dl[d].country << " - " << dl[d].area << " i najwieksza: " << dl[c].country << " - " << max << endl;

                    break;
                }

        }
            cout<<endl<<"Wykonac inne funkcje? [t/n] :";
            cin>>w;
        }



    return 0;
}



 

Podczas wykonywania funkcji 3 i 4 wywala windowsowy bład program przestał działać. W czym może tkwić problem? Plik europa.csv do zadania nahttp://sdrv.ms/VNBqOO

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

max = dl[j].area;

min = dl[j].area;

 

ile wynosi j?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

j to kolejne wiersze które przeszukiwane są w pętli for do znalezienia maksymalnej wartości.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

ile wynosi j w momencie pobierania tych wartości?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

tak samo tutaj

 

max1 = dl.population;

min1 = dl.population;

 

i jest niezainicjowane

 

w tych min i max daj [0] zamiast i oraz j

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Faktycznie wszystko się zgadza. Nie zwróciłem na to uwagi, a wcześniej już pisałem podobne funkcje. Dzięki!

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

To jeszcze taka porada. Po co przy szukaniu min i max robić oddzielne pętle? Warunki można sprawdzić w jednej, bo i tak idziesz po tych samych elementach.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

×
×
  • Dodaj nową pozycję...