Brauche Hilfe bei einem C++ Code



  • Hi,
    wie schon der Titel verrät, hab ich ein Problem mit einem von mir selbst programmierten Programm, aber ich finde den Fehler nicht. Vielleicht könnt ihr mir helfen, das Programm ist mit Visual C++ geschrieben und ist eine Win32-Konsolenanwendung. Ich selber programmiere seit ca. seit einem Monat mithilfe des Buches C++ für Dummies. So nun mal wieder zum Code. Es ist ein shutdowner, in dem man angeben soll in wievielen Tagen, Stunden, Minuten und Sekunden das System runterfahren soll. Aber irgendwie funktioniert das nicht wie ich es mir denke, liegt das vielleicht an den if und else Schleifen? Aber damit ihr euch auch was darunter vorstellen könnt hier der Code:

    #include <cstdio>
    #include <cstdlib>
    #include <iostream>
    using namespace std;
    
    int main(int nNumberofArgs, char* pszArgs[])
    {
    
    	int Tage;
        int Stunden;
    	int Minuten;
    	int Sekunden;
    	int Berechner1;
        int Berechner2;
    	int Berechner3;
    	int Berechner4;
    
    	cout << "Schutdowner v. 1.0 by Jonas S.\n"
             << "Geben sie unten ein, in wieviele(n) Tagen, Stunden, Sekunen ihr Pc heruntergefahren werden soll.\n"
             << "Geben sie die Tage ein:     "; 
        cin  >> Tage;
        cout << "Geben sie die Stunden ein:  ";
        cin  >> Stunden;
        cout << "Geben sie die Minuten ein:  ";
        cin  >> Minuten;
        cout << "Geben sie die Sekunden ein: ";
        cin  >> Sekunden;
    
    	if (Tage <= 0)
        {  
    
        }
    	else
    	{
    	Berechner1 = Tage * 24;
    	}
    
    	if (Stunden <= 0)
    	{
        Berechner2 = Berechner1 * 60;
    	}
    
    	else
    	{
    	Berechner2 = (Stunden + Berechner1) * 60;
    	}
    
        if (Minuten <= 0)
    	{
    	Berechner3 = Berechner2 * 60;
    	}
    
    	else
    	{
        Berechner3 = (Minuten + Berechner2) * 60;
    	}
    
    	if (Sekunden <= 0)
    	{
    	Berechner4 = Berechner3 * 60;
    	}
    
    	else
    	{
    	Berechner4 = (Sekunden + Berechner3) * 60;
    	}
    
    	char shutdown[256];
    	sprintf_s(shutdown, 256, "shutdown -s -t %d", Berechner4);
    
    	system(shutdown);
    
    	cout << "Der Befehl wurde ausgefuehrt. Ihr System faehrt in " << Berechner4 << " Sekunden herunter.\n";
    
    	system("Pause");
    	return 0;
    }
    


  • und wo genau ist der fehler, was passiert oder passiert nicht, ich nehme mal an das der nicht Wartet sondern gleich runter fährt



  • Ne das nicht, aber aus irgendwelchen Gründen fährt es wenn man bei Tagen eine Zahl eingibt beispielsweise 1 erst in 60 days runter. Die Zeit ist aber richtig ausgerechnet. Und bei Stunden, Minuten und Sekunden gibt er Error an, dass Berechner1 nicht initalisiert wäre, obwohl ich das sogar bei der 1 if Schleife benutze und ihn ganz oben definiert hab. Ich schätze, dass es an 2 was liegt, zum einem an dem sprintf_s Befehl und irgendwo in der if Schleife. Nur ich finde ihn nicht. Hoffe ihr könnt mir helfen.



  • Probiers mal so: zuerst werte auf gültigkeit checken, dann

    berechner = tage * 86400 + stunden * 3600 + minuten * 60 + sekunden;
    

    Das macht die Berechnung verständlich.

    Aber laut

    C:\>shutdown -?
    

    sollte es trotzdem nicht funktionieren, da

    /t xxx Legt die Zeitberschreitungsperiode vor dem Herunterfahren auf
    xxx Sekunden fest. Der gltige Bereich ist von 0-600, der
    Standardwert ist 30. Die Verwendung von "/t xxx" setzt voraus,
    dass die Option "/f" verwendet wird.



  • Berechner1 ist auch nicht initialisiert, wenn Tage <= 0 ist. Da checkt der Compiler alle Wege ab.
    Und dann frage Dich mal, wieso da dreimal eine 60 auftaucht...
    Notfalls nimm dwo77's Tip ernst.



  • Hmm müsst ich mal prüfen. Aber der Code von dwo77 ist zwar einfach und sinvoll, nur das Problem ist wenn der Anwender bei Tage beispielsweise -1 angiebt. Ich schreib mal den Code mit nem Switcher um, damit müssts funktionieren.



  • Darum hab ich ja geschrieben:

    zuerst werte auf gültigkeit checken

    kannst aber trotzdem in einer zeile abhandeln:

    berechner = (tage > -1 ? tage : 0) * 86400 + ...
    


  • Hmm kann ich grad nicht testen, da c++ den Pfad irgendwie nimmer findet, general error c10100b1, was soll ich tun?



  • Airfighter76 schrieb:

    Hmm kann ich grad nicht testen, da c++ den Pfad irgendwie nimmer findet, general error c10100b1, was soll ich tun?

    Hm, probier doch einfach mal "neu erstellen" deines Projekts.



  • Ne funkt nicht. Ich hat das Problem schon mal, nur irgendwie ist es später dann wieder gegangen.


Anmelden zum Antworten