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

system ("cls")

0 głosów
5,768 wizyt
pytanie zadane 11 stycznia 2018 w C i C++ przez ildan91 Użytkownik (630 p.)

Witam, Jakiej funkcji użyć, aby pierwszy cout nie znikał podczas odliczania?


 


#include <iostream>
#include <windows.h>
#include <cstdlib>
using namespace std;

int main()
{
    cout << "Jestem grubym koreancem i rozdupce ten swiat" << endl;
    for(int i=15;i>=0;i--)
    {

      cout <<i<<endl;

Sleep(1000);
system("cls");
    }
cout<< "Jebut!";


    return 0;
}

 

komentarz 11 stycznia 2018 przez Patrycjerz Mędrzec (192,460 p.)
Co oznacza "pierwszy cout"?
komentarz 11 stycznia 2018 przez ildan91 Użytkownik (630 p.)
Nic. Chciałbym zeby ten tekst pozostał w konsoli. Tekst jest losowy
komentarz 12 stycznia 2018 przez PsyLisek Użytkownik (570 p.)
Po prostu pisz tekst od nowa przy każdym wywołaniu pętli.
Możesz też użyć \b. tutaj masz przykład:
https://stackoverflow.com/questions/3745861/how-to-remove-last-character-put-to-stdcout

2 odpowiedzi

+1 głos
odpowiedź 11 stycznia 2018 przez Eryk Andrzejewski Mędrzec (165,260 p.)
edycja 11 stycznia 2018 przez Eryk Andrzejewski

Najprościej wypisywać go ponownie, z każdym obiegiem pętli wink

P.S.

Zupełnie nie widzę sensu stosowania funkcji Sleep() z WinAPI i tym samym praktycznie likwidowania przenośności kodu, kiedy jest lepsze rozwiązanie - należące do standardu języka C++.

#include <thread>
#include <chrono>

//Jakiś kod, jakaś funkcja...

std::this_thread::sleep_for(std::chrono::milliseconds(2000));

P.P.S

Naprawdę nie widzisz potrzeby troszczyć się o ładne formatowanie kodu (mam na myśli wcięcia, jakaś konsekwencja w stosowaniu białych znaków)? Bo jak dla mnie taki kod jest ledwo czytelny, a gdyby się trochę rozrósł, to nawet nie mógłbym na niego patrzeć.

Poprawiłem trochę ten kod, nie wygląda ładniej? wink

#include <iostream>
#include <thread>
#include <chrono>

int main()
{
	std::cout << "Jestem grubym koreańcem i rozdupcę ten świat!\n";
		
    for (int i = 15; i > 0; --i)
    {
		std::cout << i << '\n';
		std::this_thread::sleep_for(std::chrono::milliseconds(1000));
    }
	
	std::cout << "Jebut!\n";
}

Poza tym, jest przenośny - czyli ty możesz uruchomić go na Windowsie, ja na Linuksie i jeszcze innych systemach.

Oczywiście nie mówię, że musisz umieć od razu jakieś cudowne kody pisać, ale warto chociaż na początku zwracać uwagę na wcięcia i nazewnictwo zmiennych (żeby było wiadomo co dana zmienna przechowuje).

komentarz 13 stycznia 2018 przez ildan91 Użytkownik (630 p.)
Dzięki za cenne sugestie ale dopiero się uczę, wiele rzeczy jest dla mnie nowych :)
komentarz 13 stycznia 2018 przez ildan91 Użytkownik (630 p.)
a jaki jest sens pisania za każdym razem std:: jak można powyżej funkcji napisać : using namespace std;?
komentarz 13 stycznia 2018 przez ildan91 Użytkownik (630 p.)

@Eryk Andrzejewski, Mógłbyś pokazać zapis, który nie kasował był pierwszego couta, a który bedzie kasował poszczególne couty pętli?

komentarz 13 stycznia 2018 przez Eryk Andrzejewski Mędrzec (165,260 p.)

@ildan91,  popatrz tutaj: https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice

Ogólnie, to nie po to w języku C++ zostały wprowadzone przestrzenie nazw, by utrudniać życie programistom - i nie po to, by programiści to ignorowali przez pisanie jednej dodatkowej linijki.

W skrócie mówiąc: dzięki przestrzeniom nazw widzisz do czego należy dana klasa/funkcja (w przypadku std:: jest to oczywiście biblioteka standardowa języka C++, w przestrzeni nazw sf:: znajdują się klasy biblioteki SFML i tak dalej). Do tego spada ryzyko wystąpienia konfliktu nazw. Przykładowo: w bibliotece standardowej języka C++ znajduje się klasa std::string. Wyobraź sobie teraz, że ja tworzę swoją klasę w swojej przestrzeni nazw, np. eryk::string. Dopóki nie użyjesz dyrektyw: using namespace std; i using namespace eryk; to wszystko będzie działać jak należy.

Najgorsze jest stosowanie dyrektywy using globalnie (czyli nie wewnątrz jakiejś funkcji), a jeszcze gorsze - w plikach nagłówkowych.

Ja sugeruję się trochę wysilić i pisać ten std:: wink

komentarz 13 stycznia 2018 przez Eryk Andrzejewski Mędrzec (165,260 p.)

Mógłbyś pokazać zapis, który nie kasował był pierwszego couta, a który bedzie kasował poszczególne couty pętli?

Troszkę nie rozumiem.

0 głosów
odpowiedź 11 stycznia 2018 przez tangarr VIP (140,920 p.)
Możesz użyć funkcji SetConsoleCursorPosition lub możesz drukować pierwszą linię wewnątrz pętli.

Podobne pytania

0 głosów
2 odpowiedzi 1,633 wizyt
pytanie zadane 5 lutego 2017 w C i C++ przez WireNess Stary wyjadacz (11,240 p.)
0 głosów
2 odpowiedzi 583 wizyt
pytanie zadane 13 stycznia 2016 w C i C++ przez sqbi Początkujący (470 p.)
0 głosów
2 odpowiedzi 313 wizyt
pytanie zadane 4 września 2019 w Python przez Czesc Początkujący (430 p.)

89,693 zapytań

138,297 odpowiedzi

309,243 komentarzy

59,623 pasjonatów

Motyw:

Akcja Pajacyk

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

Sklep oferujący ćwiczenia JavaScript, PHP, rozmowy rekrutacyjne dla programistów i inne materiały

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...