C++ (Konsole) eine mehrstellige Zahl löschen



  • Ausprobieren, begreifen, umbauen, einbauen: 😉

    #include <iostream> 
    #include <time.h>
    
    using std::cout; 
    using std::endl; 
    
    void sleep( clock_t wait )
    {
    	clock_t goal;
    	goal = wait + clock();
    	while( goal > clock() )
    		;
    }
    
    int main() 
    { 
    	int i = 1100; 
    
    	while(i) {
    		cout.width(10);
    		cout << i--;
    		for(int j=0;j<10;++j) cout << '\b';
    		sleep(10);
    	}
    
    	cout << endl; 
    
    	std::cin.get(); 
    	return 0x0; 
    }
    


  • _matze schrieb:

    Ausprobieren, begreifen, umbauen, einbauen: 😉

    #include <iostream> 
    #include <time.h>
    
    using std::cout; 
    using std::endl; 
    
    void sleep( clock_t wait )
    {
    	clock_t goal;
    	goal = wait + clock();
    	while( goal > clock() )
    		;
    }
    
    int main() 
    { 
    	int i = 1100; 
    
    	while(i) {
    		cout.width(10);
    		cout << i--;
    		for(int j=0;j<10;++j) cout << '\b';
    		sleep(10);
    	}
    
    	cout << endl; 
    
    	std::cin.get(); 
    	return 0x0; 
    }
    

    Danke _matze. Habe es ausprobiert und auch verstanden. Ich habe es jetzt jedoch so gemacht:

    while(sek >= 0)
    {
    	cout << setw(2);
    	cout << sek--;
    
    	for(int i = 0; i <= 1; i++)
    		cout << "\b";
    	Sleep(1000);
    }
    

    Danke natürlich auch an alle anderen!!!



  • Wenn du immer zum Zeilenanfang zurück willst kannst du auch einfach ein einzelnes \r ausgeben.



  • hustbaer schrieb:

    Wenn du immer zum Zeilenanfang zurück willst kannst du auch einfach ein einzelnes \r ausgeben.

    Danke, dasss weiß ich bereits. Werde es irgendwann mal gebrauchen 🙂



  • In C/C++ schreibt man bei den Abbruchbedingungen üblicherweise nur das < (statt <=) dann kann man die Anzahl der Durchläufe sehr einfach erkennen:

    for(int i = 0; i < 2; i++)\\ 2 Durchläufe
    

    Allerdings kannst du auch gleich die zwei \b direkt ausgeben.
    (aber der Compiler wird das eh optimieren)



  • DirkB schrieb:

    In C/C++ schreibt man bei den Abbruchbedingungen üblicherweise nur das < (statt <=)

    Also ich finde, das ist eigentlich reine Geschmackssache. Manchmal mach ich es so, manchmal aber auch anders 🤡



  • DirkB schrieb:

    In C/C++ schreibt man bei den Abbruchbedingungen üblicherweise nur das < (statt <=) dann kann man die Anzahl der Durchläufe sehr einfach erkennen:

    Im Prinzip ja. Nur schreibt man in C++ zunehmend != statt < und es gibt kein C/C++ (Beweis: Deine Vermutung.)



  • Genau. Es gibt nur C und C++. Kurz: C+C++! 🤡



  • #include <iostream>
    #include <time.h>
    
    void mysleep( clock_t wait )
    {
        clock_t goal;
        goal = wait + clock();
        while( goal > clock() )
            ;
    }
    
    int main()
    {
        using std::cout;
        using std::endl;
        using std::flush;
    
        int i = 1100;
    
        while(i) {
            cout.width(10);
            cout << i--;
            cout<<flush;//Ohne irgend do ein flush springt der cursor schlimm
            mysleep(10);
            for(int j=0;j<10;++j) cout << '\b';
        }
    
        cout << endl;
    
        std::cin.get();
        return 0x0;//Scherzkeks. 
    }
    

    Aber warum das umständliche '\b'?
    Üblicher ist '\r'.

    while(i) {
            cout << '\r' ;
            cout.width(10);
            cout << i-- << flush;
            mysleep(10);
        }
    

    Wobei ich mich auch nicht um width kümmere, sondern

    while(i) {
            cout << '\r' << i-- << ' ' << flush;
            mysleep(10);
        }
    

    , sowas sind ja nur mehr oder weniger Debug-Ausgaben.



  • volkard schrieb:

    DirkB schrieb:

    In C/C++ schreibt man bei den Abbruchbedingungen üblicherweise nur das < (statt <=) dann kann man die Anzahl der Durchläufe sehr einfach erkennen:

    Im Prinzip ja. Nur schreibt man in C++ zunehmend != statt < und es gibt kein C/C++ (Beweis: Deine Vermutung.)

    OK.
    Aber das Printip bleibt, man sieht die Anzahl besser als beim <= 🙂


Anmelden zum Antworten