Samowyłanczająca się konsola w Dev-C++

Gdy kopiuje kod programu z kursu " C++ bez cholesterolu " :

Okno pojawia się i zaraz znika . Dlaczego?

przed linijką

return 0;

napisz

getchar();

to spowoduje zatrzymanie działania programu bo przecież chcesz zobaczyć wynik, czyli w jaki sposób program zadziałał

Wielki dzięki .

A mam jedno pytanie : jak nauczyłeś się programować ?

W dniu 21.06.2008 , o godzinie 21:16 został dopisany post przez Pioter233

A jeszcze 1 błąd jest .

I okno się zamyka mimo dodania “getchar();” . Co się dzieje?

LUDZIE! NAUCZCIE SIĘ SZUKAĆ! Ten temat już był omawiany w tym tygodniu!

Biblioteki conio nie łączy się z iostream! Zamiast getchar, wywołaj cin.read!

Ja łącze i wszystko działa. Z Conio.h wykorzystuje tylko getch () i jest wszystko w porządku. Pioter233 nie musisz pisać np:

getch ();

return 0;

Program i bez ‘return 0’ zakończy prace ja return 0 wykorzystuje przy zamykaniu aplikacji po określonym warunku i tyle :slight_smile:

ty masz

getchar();

a ma być

getch();

a jeszcze dokładniej (według nowego standardu ISO

_getch();

Jeżeli chcesz się dobrze nauczyć programować to zachęcam do kupna książek Jerzego Grębosza “Symfonia C++ Standard”. Dokładny opis i wszystkiego.

Co do IO w C/C++ i pobierania znaku to w jest funkcja

int getchar( void );

Natomiast w wiele przeciążonych funkcji

int get();

Więc jeżeli naprawdę chcesz zatrzymywać program przez pobieranie znaku to możesz napisać getchar() (jeżeli dołączyłeś cstdio) lub cin.get() dla iostream. Bez wiedzy jak działa IO w C i C++ radzę nie używać ich razem. Nic dziwnego, że ten kod nie działa, tak jak myślisz:

cin >> ile;

cout << "No no ! Już " << ile << " ? \n.";

getchar();

Po wczytaniu danych do zmiennej ile w strumieniu zostaje znak nowej linii, który jest pobierany przez getchar() i program kończy swoje działanie. Musiałbyś posłużyć się cin.ignore(), która służy do “wyrzucania” znaków ze strumienia, np. ten kod działa zgodnie z oczekiwaniami:

std::cout << "Litera z iostream: " << (char) std::cin.get() << std::endl;

	std::cin.ignore();

	std::cout << "Litera z cstdio: " << (char) getchar() << std::endl; // lub std::cin.get - po std::cin.ignore()

Tak jak xZeuSx , polecam Symfonię C++ standard i http://www.cppreference.com/ :slight_smile:

PS. O co chodziło Ci xZeuSx w tym poście, nigdy o getch() w bibliotece standardowej nie słyszałem, chyba coś pomyliłeś.

PS2. A nie lepiej po prostu najpierw otworzyć konsolę, a później z niej uruchamiać program? Wtedy się nie zamknie, o ile piszesz dla siebie i do nauki to wszystko jedno, ale ogółem lepiej nie wymuszać tak działania programu.

Temat nie dotyczy sposobów opanowywania sztuki programowania. Proszę się skupić wyłącznie na rozwiązywaniu konkretnych problemów. OTy -> kosz

Ja uczę się z kursu Xion’a i mi wystarcza , umiem mało ale już piszę programy o wiele bardziej zaawansowane chocby od zwykłego kalkulatora :slight_smile:

Ja używam system(“pause”);

system("pause");

Efekt: Zatrzymanie programu i wyświetlenie napisu: “Aby zakończyć, naciśnij dowolny klawisz…”

system("pause>nul");

Efekt: Zatrzymanie programu, bez zbędnego wyświetlania napisu. No i oczywiście po naciśnięciu dowolnego klawisza program sie wyłącza :slight_smile:

Edit: Oczywiście zamieszczasz to przed return 0;

Po tym także zamyka się konsola . Dlaczego??

int main ()

{

int wys, punkty_karne ;


cout << " Na jakiej wysokości lecimy ? ( w metrach ) : " ;

cin >> wys ;


if(wys < 500)

{

cout << "\n" << wys << " metrow to za nisko ! \n";

punkty_karne = 1 ;

}

else

{ cout << "\nNa wysokosci " << wys

<< " metrow jestesmy juz bezpieczni \m";

punkty_karne = 0 ;

}

cout << " Masz " << punkty_karne

<< " punktu karne \n" ;

if(punkty_karne)cout << " Popraw sie !" ;

getch(); // lub system("pause") || wiem, mało profesjonalne ale to jedyne wyjście.

}

Jeżeli program miał się wykonywać w kółko to coś sknociłeś.

taka mała uwaga, formatuj kod, będzie on czytelniejszy dla Ciebie i innych.

Powtóże to jeszcze raz: biblioteki conio nie łączy się ze strumieniami C++! Ile razy można powtarzać to w jednym wątku?! Zamiast getchar użyj cin.get/cin.read/system(“PAUSE”)!

Albo

getch ();

;p