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

system ("cls")

VPS Starter Arubacloud
0 głosów
7,192 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,340 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 (164,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 (164,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 (164,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 Mędrzec (154,780 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,989 wizyt
pytanie zadane 5 lutego 2017 w C i C++ przez WireNess Stary wyjadacz (11,240 p.)
0 głosów
2 odpowiedzi 854 wizyt
pytanie zadane 13 stycznia 2016 w C i C++ przez sqbi Początkujący (470 p.)
0 głosów
2 odpowiedzi 514 wizyt
pytanie zadane 4 września 2019 w Python przez Czesc Początkujący (430 p.)

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...