Zähler Problem



  • Ich habe hier ein Programm gemacht das Zählen soll.
    Um genau zu sein ein Coundown.

    Er Funktioniert bloß nicht Richtig.
    Anstat den Richtigen Wert wieder zu geben sagt er als 1.

    Mein Prog.

    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    void main()
    {
    	int Zaehler=10000;
    	int SekundenZahl;
    
    	if (Zaehler>10000)
    	{
    		SekundenZahl=10;
    	}
    	if (Zaehler>9000)
    	{
    		SekundenZahl=9;
    	}
    	if (Zaehler>8000)
    	{
    		SekundenZahl=8;
    	}
    	if (Zaehler>7000)
    	{
    		SekundenZahl=7;
    	}
    	if (Zaehler>6000)
    	{
    		SekundenZahl=6;
    	}
    	if (Zaehler>5000)
    	{
    		SekundenZahl=5;
    	}
    	if (Zaehler>4000)
    	{
    		SekundenZahl=4;
    	}
    	if (Zaehler>3000)
    	{
    		SekundenZahl=3;
    	}
    	if (Zaehler>2000)
    	{
    		SekundenZahl=2;
    	}
    	if (Zaehler>1000)
    	{
    		SekundenZahl=1;
    	}
    	if (Zaehler==0)
    	{
    		SekundenZahl=0;
    	}
    
    	for(Zaehler; Zaehler>0; Zaehler--)
    	{
    		cout << "Zeit bis zum Beenden: " << SekundenZahl << endl;
    	}
    	system("PAUSE");
    }
    

    Danke im Voraus.
    Gruß, Siegfried75 :).

    PS: void main() ist so da weil ich VC6 benutze.



  • Ist natürlich 1 weil er am Anfang in die Vorletzte Abfrage reinspringt und es speichert...
    in der Schleife ändert sich ja dann nix...
    ➡ deine Abfragen solltest du wohl in deine Schleife reingeben 😉

    Du könntest einfach die Zahl durch 1000 dividieren und ausgeben wär einfacher...
    Also ohne alle Abfragen und so bekommst immer die richtige Sekunde
    Auch wenn das dann nicht zeitbezogen ist sondern von deiner Rechnergeschwindigkeit abhängt



  • Also ich verstehe das ich den text so machen müsste.

    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    void main()
    {
    	int Zaehler=10000;
    	int SekundenZahl;
    
    	for(Zaehler; Zaehler>0; Zaehler--)
    	{
    		if (Zaehler>10000)
    		{
    		 SekundenZahl=10;
    		}
    	    if (Zaehler>9000)
    		{
    	    	 SekundenZahl=9;
    		}
    	    if (Zaehler>8000)
    		{
    	       SekundenZahl=8;
    		}
    	    if (Zaehler>7000)
    		{
    	    	SekundenZahl=7;
    		}
      	    if (Zaehler>6000)
    		{
    	    	SekundenZahl=6;
    		}
    	    if (Zaehler>5000)
    		{
    	    	SekundenZahl=5;
    		}
    	    if (Zaehler>4000)
    		{
    	    	SekundenZahl=4;
    		}
    	    if (Zaehler>3000)
    		{
    	    	SekundenZahl=3;
    		}
    	    if (Zaehler>2000)
    		{
    	    	SekundenZahl=2;
    		}
    	    if (Zaehler>1000)
    		{
        		SekundenZahl=1;
    		}
        	if (Zaehler==0)
    		{
        		SekundenZahl=0;
    		}
    		cout << "Zeit bis zum Beenden: " << SekundenZahl << endl;
    	}
    	system("PAUSE");
    }
    

    aber das zweite kapier ich nicht.

    Edit: Er sagt auch so immer noch 1.



  • Siegfried75 schrieb:

    Edit: Er sagt auch so immer noch 1.

    Logisch. Das Programm geht bei 10000 in jeden if-Block rein, bis auf den letzten, denn 10000 ist nunmal auch > 1000. Und die letzte ausgeführte Zuweisung bestimmt den Wert.



  • Für die erste Variante musst du schon noch was verändern!
    Die Zweite wäre so:

    #include <iostream> 
    #include <cstdlib> 
    using namespace std; 
    
    void main() 
    { 
        int Zaehler=10000; 
        int SekundenZahl; 
    
        for(Zaehler; Zaehler>0; Zaehler--) 
        { 
            //system("cls");  Damits ned so arg ausschaut
            cout << "Zeit bis zum Beenden: " << Zaehler/1000 << endl; 
        } 
        system("PAUSE"); 
    }
    


  • Jetzt geht es

    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    void main()
    {
    	int Zaehler=10000;
    	int SekundenZahl;
    
    	for(Zaehler; Zaehler>0; Zaehler--)
    	{
    		if (Zaehler<10000)
    		{
    		 SekundenZahl=10;
    		}
    	    if (Zaehler<9000)
    		{
    	    	 SekundenZahl=9;
    		}
    	    if (Zaehler<8000)
    		{
    	       SekundenZahl=8;
    		}
    	    if (Zaehler<7000)
    		{
    	    	SekundenZahl=7;
    		}
      	    if (Zaehler<6000)
    		{
    	    	SekundenZahl=6;
    		}
    	    if (Zaehler<5000)
    		{
    	    	SekundenZahl=5;
    		}
    	    if (Zaehler<4000)
    		{
    	    	SekundenZahl=4;
    		}
    	    if (Zaehler<3000)
    		{
    	    	SekundenZahl=3;
    		}
    	    if (Zaehler<2000)
    		{
    	    	SekundenZahl=2;
    		}
    	    if (Zaehler<1000)
    		{
        		SekundenZahl=1;
    		}
        	if (Zaehler==0)
    		{
        		SekundenZahl=0;
    		}
    		cout << "Zeit bis zum Beenden: " << SekundenZahl << endl;
    	}
    	system("PAUSE");
    }
    

    aber wie könnte ich das machen, das er nicht immer den selben text schreibt sondern immer nur die Zahl verändert?



  • Ja oder einfach ein else if aus den anderen machen 😉
    Aber die kürzere Variante wäre trotzdem empfehlenswerter



  • aber wie könnte ich das machen, das er nicht immer den selben text schreibt sondern immer nur die Zahl verändert?

    Ja gut,aber ich wüsste nicht wie ich das anstellen sollte.

    Wüstest du etwas zu dem da oben?
    Oder ist das nicht möglich?



  • Also wenn du die kürzere meinst die hab ich schon gepostet

    #include <iostream> 
    #include <cstdlib> 
    using namespace std; 
    
    void main() 
    { 
        int Zaehler=10000; 
        int SekundenZahl; 
    
        for(Zaehler; Zaehler>0; Zaehler--) 
        { 
            //system("cls");  Damits ned so arg ausschaut
            cout << "Zeit bis zum Beenden: " << Zaehler/1000 << endl; 
        } 
        system("PAUSE"); 
    }
    

    wenn du möchtest dass es nicht so flackert dann setz ein \r davor dann wird die Zeile "gelöscht" und dann neu geschrieben

    Das wär das:

    {int Zaehler=10000; 
        int SekundenZahl; 
    
        for(Zaehler; Zaehler>0; Zaehler--) 
        { 
    
            cout<<"\rZeit bis zum Beenden: "<< Zaehler/1000<<"  " ; 
        } 
    
        system("PAUSE"); 
    }
    

    EDIT: jetzt passts!!



  • Funktioniert das auch mit cout?
    lol was für ne dumme frage na klar gehts auch mit cout.
    Danke.

    Er zeigt hinter der Zahl die geändert werden soll noch so andere Zahlen.
    Also 9 8 7 6 5 und so geht bloß dahinter stehen noch andere zahlen.



  • ja habs eh schon geändert gehabt 😉
    war nur für testzwecke!
    jetzt passt alles



  • Verwende mal das neueste was ich gepostet gehabt hab..Damit müssts gehen...
    die Cursorposition wird ja zurückgestellt und deshalb hast du hinten noch die Buchstaben von vorher

    Wenns sonst ned geht zeig einfach mal deine Ausgabe



  • Wie gewünscht ist das imme rnoch nicht.

    der Code heißt ja jetzt so

    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    void main()
    {
    	int Zaehler=10000;
    
    	for(Zaehler; Zaehler>0; Zaehler--)
    	{
    		cout << "\rZeit bis zum Beenden: " << Zaehler/1000;
    	}
    	system("PAUSE");
    }
    

    Er sagt beim zählen das hier.
    Also das damit der keine neue zeile imme rmacht geht.

    Zeit bis zum Beenden: 90
    Zeit bis zum Beenden: 80
    Zeit bis zum Beenden: 70
    Zeit bis zum Beenden: 60
    Zeit bis zum Beenden: 50
    Zeit bis zum Beenden: 40
    Zeit bis zum Beenden: 30
    Zeit bis zum Beenden: 20
    Zeit bis zum Beenden: 10
    Zeit bis zum Beenden: 00
    Zeit bis zum Beenden: 0Drücken sie eine beliebige Taste.



  • Hab vorher eh schon geschrieben du musst dann noch ein oder zwei blank anhängen...weil die 10 ist ja zweistellig und die erste Zahl also hast du da noch die 0 stehen...

    #include "stdafx.h"
    #include <iostream> 
    #include <cstdlib> 
    using namespace std; 
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        for(int Zaehler=10000; Zaehler>0; Zaehler--) 
        { 
    
            cout<<"\rZeit bis zum Beenden: "<< Zaehler/1000<<"  " ; //<- Hier
        } 	
        system("PAUSE"); 
        return 0;
    }
    


  • Es Funktioniert.
    Danke.


Anmelden zum Antworten