Gdy kopiuje kod programu z kursu " C++ bez cholesterolu " :
Okno pojawia się i zaraz znika . Dlaczego?
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
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/
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
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
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