• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

System ("cls") w pętli nie działa do końca tak jak by się oczekiwało od napisanego programu

Object Storage Arubacloud
0 głosów
1,117 wizyt
pytanie zadane 21 października 2015 w C i C++ przez Adam22675 Początkujący (280 p.)
// Pierwszy program w C++ 
//lepiej używać funkcji ze standardowych bibliotek
#include <iostream>
#include <conio.h> //niestandardowa biblioteka, co czyni program mniej przenosnym
#include <string>
using namespace std;

string strimie;
const int dni_w_tygodniu = 7;

void tekst () //wydzielony fragment odpowiedzialny za wypisanie tekstu do osobnej funkcji
{
	cout << "Hurra! W koncu zaczne programowac!" << endl;
	cout << "Podaj swoje imie: ";
	cin >> strimie;
	cout << "Witam " << strimie << ", to jest pierwszy program w C++!"<< endl;
	cout << "Tydzien ma "<< dni_w_tygodniu << "dni"<<endl;
}

int main () //void mówi kompilatorowi ,że nasz program nie będzie informował systemu operacyjnego o wyniku swojego działania
{
	for (;;)
	{
	system ("cls");
	cout << "1. Twoj pierwszy program"<< endl;
	cout << "2. Wyjsciez programu" << endl;
	unsigned char wybor = _getch();
	if (wybor == 49)
	tekst ();	// funkcja ta wywolywana przez funkcje main
	else if (wybor ==27 || wybor == 50)	return 0;
	}
	_getch();
}
//DOKONUJE REFAKTORYZACJI I FUNKCJONALNOSC PIERWSZEO NAPISANEGO PRZEZE MNIE PROGRAMU

 

Witam ,

Otóż moje pytania brzmią: dlaczego nie wyświetla mi po jego odpaleniu ile jest dni w tygodniu... konczy jak gdyby część programu z funckji tekst  na wpisaniu imienia. Bez uzycia czyszczenia ekranu kod działa tzn.  wyswietla reszte funckji, z tym ,że o tyleto neichlujne ,że mi zapełnia konsole.
Pozdrawiam

3 odpowiedzi

+3 głosów
odpowiedź 21 października 2015 przez PolskiMyster Użytkownik (660 p.)
Mi się wydaje że d clsa była biblioteka cstdlib lub Windows.h
komentarz 21 października 2015 przez Shiro Stary wyjadacz (10,300 p.)
Tak windows.h :)
komentarz 21 października 2015 przez Adam22675 Początkujący (280 p.)
Tak, zapomniałem tutaj dopisać, że już dodałem bibliotekę, mimo tego na konsoli wysietla mi połowetej funkcji, jak dam system("cls"); na początku pętli nieskończonej. dałem tymczasowe w funkcji tekst Sleep(1000); i potem czysci i od nowa wchodzi do programu, ale mi by zalezalo ,zebywrocil dopiero jak uzytkownik bedzie chcial.Przepraszam,za nnie do konca dokładne sprecywaonie i dziękuje za każdąodpowiedź! :)
komentarz 21 października 2015 przez Shiro Stary wyjadacz (10,300 p.)
System("cls"); Sleep(1000);

Zważaj na wielkość liter.Może to coś da..
+1 głos
odpowiedź 21 października 2015 przez Ceki Mądrala (5,310 p.)
Wstawiłeś Spacje między system i ("cls"). Dodaj bibliotekę windows.h wpisując #include <windows.h> ;)
komentarz 21 października 2015 przez Adam22675 Początkujący (280 p.)
Dalej program nie działa jak bym tego oczekiwał, po wpisaniu imienia czysci ekran i zaczyna się od nowa wszystko, a ja oczekiwałbym od tego programu ,zeby jeszcze pokazal dni w tygodniu. Dziękujeza każdą odpowiedź!
komentarz 21 października 2015 przez draghan VIP (106,230 p.)

Białe znaki nie mają znaczenia, chyba że umieszczasz je w:

1) makrodefinicji,
2) łańcuchu znaków,
3) jeszcze w C++ '03 występował błąd interpretacji nawiasów kątowych przy definiowaniu zmiennej szablonowej, której parametrem był inny szablon - tam należało rozdzielić nawiasy spacją, żeby nie były one traktowane jako operator przesunięcia bitowego.

Możesz pisać: void funkcja ( int argument1  ,  int argument2 )      ;
Albo:
void
funkcja
(int argument1, int argument2);

Ważne jest tylko, abyś białymi znakami (jakkolwek) rozdzielił leksemy, czyli znaki lub zestawy znaków, które mają zdefiniowane znaczenie: identyfikatory, operatory, słowa kluczowe, stałe.

–1 głos
odpowiedź 21 października 2015 przez draghan VIP (106,230 p.)
edycja 21 października 2015 przez draghan

Twoja pętla powinna wyglądać tak:

for (;;)
    {
        cout << "1. Twoj pierwszy program"<< endl;
        cout << "2. Wyjsciez programu" << endl;
        unsigned char wybor = _getch();
        if (wybor == 49)
            tekst ();	// funkcja ta wywolywana przez funkcje main
        else if (wybor ==27 || wybor == 50)	return 0;

        system("pause");
        system ("cls");
    }

...albo jeszcze lepiej: zamień tę nieskończoną pętlę for(), która nie jest nieskończona - na skończoną pętlę do-while:

unsigned char wybor; /* musimy wyrzucić definicję 
                        tej zmiennej przed pętlę, żeby 
                        można było użyć jej w wyrażeniu
                        sterującym pętlą
                     */
    do
    {
        cout << "1. Twoj pierwszy program"<< endl;
        cout << "2. Wyjsciez programu" << endl;
        wybor = _getch();
        if (wybor == 49)
            tekst();	// funkcja ta wywolywana przez funkcje main

        system("pause");
        system ("cls");
    } while(wybor != 27 && wybor != 50);

 

komentarz 21 października 2015 przez draghan VIP (106,230 p.)
Kiedy ktoś napisze bezwartościowy czy błędny post, wypowiadam się w komentarzu pod owym postem, aby autor miał szansę się poprawić, jeszcze ZANIM zagłosuję.

Dwonvote z mojej strony jest rzadkością i nigdy nie robię tego, nie podając powodu.

Apeluję do autora downvote'a o jawne podanie mi przyczyny. Na tę chwilę takowej nie widzę, a chciałbym wiedzieć, jeśli wprowadziłem kogoś w błąd.

Podobne pytania

0 głosów
2 odpowiedzi 2,029 wizyt
pytanie zadane 5 lutego 2017 w C i C++ przez WireNess Stary wyjadacz (11,240 p.)
0 głosów
0 odpowiedzi 136 wizyt
pytanie zadane 10 marca 2019 w JavaScript przez Sobol3k Użytkownik (690 p.)
0 głosów
0 odpowiedzi 242 wizyt

92,578 zapytań

141,426 odpowiedzi

319,653 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...