• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

c++, problem mit typen

Status
Für weitere Antworten geschlossen.

Frank

Neues Mitglied
Hi, ich sitz schon eine ganze weile an einem *Mini-Script*

Es soll im grunde genommen nur veranlassen, dass der Computer zu einem bestimmten Zeitpunkt herunterfährt

Allerdings verlangt die Funktion system() einen const char*, ich übergebe ihr einen String. deshalb geht es nicht.

Habe schon lange gesucht, doch ich finde einfach keine Lösung dafür.

Ich danke euch für jede Hilfe (Dev-Cpp, Win XP)

Code:
#include <cstdlib>
#include <iostream>
#include <string>

using namespace std;
bool frage()
{
    string antwort = "undefined";
    while (antwort != "j" && antwort != "n")
    {
    cout << "\nFortfahren (j/n)?: ";
    getline(cin,antwort);
    };
    if(antwort == "n")
    {
       return false;
    }
    else
    {
        return true;
    }
}

int main()
{
    bool weiter;
    string stunde;
    string minute;
    string befehl;
    cout << "Dies ist ein Shutdown-Tool\n";
    cout << "Sie koennen hiermit den Computer zu einem gewählten Zeitpunkt herunterfahren";
    weiter = frage();
    if(!weiter)
    {
        return 0;
    }
    else
    {
         cout << "Zeipunkt definieren\n";
         cout << "Geben sie die Stunde ein (00-23):\n";
         cin >> stunde;
         cout << "\nGeben sie die Minute ein (00-59):\n";
         cin >> minute;
         cout << "\n Computer wird um "<<stunde<<":"<<minute<<" Heruntergefahren\n";
         //befehl = "at ".stunde.":".minute." /interactive shutdown -s -t 20";
         befehl=string("at ")+stunde+string(":")+minute+string(" /interactive shutdown -s-t 10");

         system(befehl);
         cout << "\n"<<befehl<<"\nTaste drücken zum beenden des Programms\n";
         system("PAUSE");
         return 0;
    }    
}
 
Werbung:
hallo ...

also ich würde das einfach direkt eingeben, also system("shutdown -a");
bzw. die eingelesene Zeit Shutdown -t HH:MM:SS übergeben.

du kannst die zeit nicht mit strings einlesen. dazu musst du integer verwenden.

Code:
#include <iostream>

using namespace std;

int main(){

int h, m, s;

cin h;
cin m;
cin s;

system ("shutdown -t %d%s%l",h,m,s");

return 0;
}

sowas in der art dürfte es tun, eben halt ohne viel gelaber ^^ . also wenn du das für dich allein verwenden willst, dann sollte das ja reichen.


lg,
n1ob
 
hm geht leider nicht

bei exakt deinem code (bei cin noch >> eingefügt) kommt der fehler:
14 C:\Dev-Cpp\shutdown-tool\shutdown.cpp missing terminating " character

Wenn man nun " hinzufügt
Code:
system ("shutdown -t %d%s%l",h,m,s"");
356 C:\Dev-Cpp\include\stdlib.h too many arguments to function `int system(const char*)'

Und wenn ich es ohne mache
Code:
system ("shutdown -t %d%s%l",h,m,s);
356 C:\Dev-Cpp\include\stdlib.h too many arguments to function `int system(const char*)'
 
Werbung:
1. Ist das kein Script sondern ein Programm oder eine Anwendung.

2. einen string kannst du über die methode c_str() in einen char* umwandeln.
Das sieht dann so aus:
Code:
string Command;
Command = "shotdown now";

system(Command.c_str());

3. Versuche doch mal die meldung zu verstehen:
Code:
14 C:\Dev-Cpp\shutdown-tool\shutdown.cpp missing terminating " character
|  |                                     |       |           |
|  |                                     |       |           " Zeichen.
|  |                                     |       das abschließende
|  |                                     fehlt
|  in dieser Datei
Auf Zeile 14

Und schon weist du was der fehler ist.
Das heißt du musst aus dieser Zeile:
Code:
system ("shutdown -t %d%s%l",h,m,s"");
folgendes machen:
Code:
system ("shutdown -t %d%s%l\",h,m,s\"");
 
hey,

danke prophet ;)

aber um auf dein problem zurückzukommen:
Code:
#include <iostream>

using namespace std;

int main(){

   int s;

     cin >> s;

 system ("shutdown -t %d, s");

return EXIT_SUCCESS;
}
Dasda sollte tun.
1) Man kann die Zeit laut Microsoft nur in Sekunden angeben, also wenn du was andres willst, dann musste es umrechnen - sollte aber nicht so schwer sein.

Bei mir meldet er sich nur sofort ab, wird ein bug sein.


lg,
n1ob
 
Kein bug N10B es liegt daran das C++ wohl nicht ganz beherrscht. Du kannst in C++ nicht einfach eine variable in einen string schreiben und dann erwarten das ihr wert dort steht. Grunsätzlich müsstest du es so machen:
Code:
int s;
cin >> s;
system ("shutdown -t %d, " + s);
Allerdings ergeben sich hier zwei probleme. Erstens ist der operator + nur für das verbinden von Strings ausgelegt das heißt ein Interger kann man nicht so einfach anhängen. Daraus ergibt sich das zweite Problem, es gibt nämlich keine funktion um einen Interger wert in einen string umzuwandeln. Das ginge zwar ist aber viel tüftelei die ich hier nicht erklären möchte.
Daher würde ich dazu raten das do statt eines Integer einen String für die eingabe nutzt. Dadurch umgehst du einerseits das problem der umwandlung und anderer seit das problem das es zu abstürzen kommt wenn du keine zahl eingibst.
Das würde dann so aussehen:
Code:
string s;
cin >> s;
system ("shutdown -t %d, " + s);
Wenn das einen fehler gibt versuche es so:
Code:
string s;
cin >> s;
system (string("shutdown -t %d, ") + s);
Falls du nun noch überprüfen willst ob auch wirklich eine zahl eingegeben wurde kannst du das über die ctype funktionen machen. Eine funktion die überprüft ob ein gültiger interger eingegeben wurde sieht dann z.B. so aus:
Code:
bool IsInteger(const string& Str)
{
  for(int i = 0; i < Str.length(); i++)
  {
    if(!isdigit(Str.at(i)))
    {
      return false;
    }
  }
  return true;
}
Ausserdem hat diese Variante noch den vorteil das du strings problemlos ins integers umwandeln kannst.
 
Werbung:
Status
Für weitere Antworten geschlossen.
Zurück
Oben