Problem z kodem - string

0

Dzień dobry,

chciałbym prosić o pomoc przy kodzie programu. Mam kod programu, sprawdzającego która liczba jest mniejsza a która większa i działa on poprawnie:

#include <iostream>
using namespace std;

int main()
{
    int num, max = 0, min;



    while (num != -99)
    {
        cout << "Wprowadz liczbe calkowita: ";
        cin >> num;

            if (num > max)
                max = num;
                if (num != -99)
                {
                    if (num < min)
                    min = num;
                }
    }
    cout << "Najmniejsza liczba to: " << min << endl;
    cout << "Najwieksza liczba to: " << max << endl;
}

oraz drugi napisany na podstawie pierwszego, ale dotyczący klasy string i niestety niedziałający:

#include <iostream>
#include <string>
using namespace std;

int main()
{
    int numStudents;
    string name, max, min;


    cout << "Podaj liczbe uczniow: ";
    cin >> numStudents;

    for (int i = 1; i <= numStudents; i++)
    {

        cout << "Podaj imie " << i << " ucznia: ";
        cin >> name;

        if (name > max)
            max = name;
        if (name < min)
            min = name;
    }
    cout << min << " na poczatku " << endl;
    cout << max << " na koncu " << endl;
}

Kod się kompiluje, ale daje złe wyniki. Czy ktoś natknął się może na coś podobnego? Proszę o pomoc w rozwiązaniu problemu.

Za wszelką pomoc z góry dziękuję.

2

Pusty string zawsze będzie najmniejszy, nie ma szansy, żeby min zmienił wartość. Jeśli min zainicjalizujesz kilkunastoma znakami alfanumerycznymi o najwyższej wartości to powinno zadziałać.

0

@several: Dzięki za odpowiedź! Wpisałem coś takiego: min = "999zzzzzzzzz" (próbowałem też "999999999999", "zzzzzzzzzzzzzzz" itp.) i nadal nie działa. Po skompilowaniu pojawia się tylko tekst w cudzysłowie :(

0

@several: Działa! Wcześniej też próbowałem inicjalizować max i min, ale błędnie do max przypisałem największą, a do min najmniejszą wartość, dlatego wynik był nieprawidłowy. Dziękuję za pomoc!

4

Wersja krótsza i nie potrzebująca dziwnych inicjalizacji:

#include <iostream>
#include <string>
using namespace std;

int main()
{
	string max,min,name;
	for(int i=0;i<4;++i)
	{
	    cout<<"Podaj imie "<<(i+1)<<" ucznia: ";
	    cin>>name;
	    if(!i) max=min=name;
	    else if(max<name) max=name;
	    else if(min>name) min=name;
	}
	cout<<endl<<min<<" na poczatku"<<endl<<max<<" na koncu"<<endl;
	return 0;
}

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