1' jesli chcecie sie spierac o wyzszosci jednego podejscia do zycia nad innym i przy okazji wyzywac sie od nieudacznikow, dwojowiczow i idiotow - umowcie sie na GG okej?
2'
adryan3000 napisał(a)
wybierając z menu 'imię' potem wpisuję 'antoni' i okno się zamyka
winerfresh napisał(a)
Jaki masz kompilator?? Bo mi wszystko działa.
winerfresh napisał(a)
...
int main() { ...
char in;
string name,surname;
cout<<"Wg jakiego kryterium wyszukiwac: [i]mie, czy [n]azwisko?";
cin>>in; /// 1
if (in=='i') {
cout<<"Podaj imie: ";
cin>>name; /// 2
cout<<"Numer tej osoby na liscie studentow to: \n";
find_name( name, tabl, sizeof(tabl)/12 );
}
else
if (in=='n') {
cout<<"Podaj nazwisko, ktore mam wyszukac:";
cin>>surname; /// 3
cout<<"Numer tej osoby na liscie studentow to: \n";
find_surname( surname, tabl, sizeof(tabl)/12 );
}
cin.get(); /// 4
return 0;
}
adryan3000 ma racje. program po skonczeniu pracy sie po prostu sie zamknie. to ze winerfresh widzi jakis efekt jego pracy a adryan3000 nie - to wynika z konfiguracji IDE. zgaduje ze winerfresh pracuje pod konsola i po prostu widzi co program wypisal, a adryan3000 w swoim BCB nie ustawil zadnej opcji przytrzymania okna po zaknczeniu programu (o ile takowa w ogole jest w bcb)
w miejscach w kodzie oznaczonych (1)(2)(3) winerfresh wczytuje dane z cin operatorami >>. jak wiadomo, operatory te pomijaja biale znaki sprzed danych odczytywanych, ale pozostawiaja biale znaki po nich, az do nastepnego czytania.
tak wiec, zawrowno w (1), (2), jak i (3) za kazdym razem w buforze cin'a pozostaja znaki konca linii ktore uzytkownik musial wprowadzic nacisnajac enter przy wprowadzaniu linii.
i tenze wlasnie znak zostaje zebrany przez cin.get() w linii (4) co sprawia ze cin.get() nie powoduje pauzy programu i zwyczajowego przytrzymania okna az user pacnie enter.
solution:
jak konczysz czytanie operatorami << i przechodzisz w miejsce kodu gdzie zakladasz ze juz wszystko odczytales i teraz czekasz na cos nowego, walnij:
std::cin.ignore(std:: numeric_limits<int>::max(),'\n'); //uniwersalne na kazdy strumien, zrzuca zbedne pozostale znaki az do konca linii
albo
std::cin.sync(); //prawidlowe tylko dla buforowanych. szczesliwie cin jest taki
edit:
eh, no i nie dopisalem..
czyli np.:
cin.sync();cin.get();return 0;