eingabe mit parameter



  • hallo
    ich versuche es im moment so:

    int main()
        {
          string command;
          int value;
    
          while(1){
          cout<<"Enter Command: ";
          cin>>command;
          cin>>value;
    
          if (command=="test" && value>=0 && value <= 1000000)
          { 
          cout<<command<<" set to "<<value<<endl;
          }
    
          else{cout<<"command doesnt exist"<<endl;}
    
          }
          return 0;
        }
    

    wenn jetzt zb test 1000 eingebe, geht es
    aber wenn ich test100 oder test eingebe stürtz es ab

    kann mir einer bitte eine mögliche lösung geben?
    danke



  • Überprüf mal, was die Variabeln für Werte annehmen. (Debugger).



  • Verwende lieber std::readline() für das Einlesen und pfriemel deinen String danach auseinander. Dann gibts auch keine ärgerlichen Reste im Konsolenpuffer.



  • CantStOp schrieb:

    ...

    int main()
        {
          string command;
          int value;
    
          while(1){
          cout<<"Enter Command: ";
          cin>>command;
          cin>>value;
    
          if (command=="test" && value>=0 && value <= 1000000)
          { 
          cout<<command<<" set to "<<value<<endl;
          }
    
          else{cout<<"command doesnt exist"<<endl;}
    
          }
          return 0;
        }
    

    wenn jetzt zb test 1000 eingebe, geht es
    aber wenn ich test100 oder test eingebe stürtz es ab...

    Also einen Auslöser für einen "Absturz" (= Speicherzugriffsfehler o.ä.) kann ich in dem Code nicht sehen ... aber dass er beim "cin >> zahl" stehenbleibt, halte ich für ganz normal....
    Wichtig: Dein Eingaben überprüfen

    if(!cin>>value) throw std::invalid_argument("Keine Zahl");
    

    Gruß,

    Simon2.



  • hi David_pb
    std::readline() hört sich gut an könntest du mir ein beispiel zeigen bitte?
    danke



  • Er meint wahrscheinlich eher getline.



  • so ich habs gelöst
    danke vielmals

    so funktioniert es prima

    while(1){
          string rawcommand;
          cout<<"Enter Command: ";
          getline( cin, rawcommand );
    
          string command = rawcommand.substr(0, rawcommand.find(" "));
          int value = atoi(rawcommand.substr(rawcommand.find(" ")+1).c_str());
    
          if (command=="test" && value>=0 && value <= 1000000)
          { 
          cout<<command<<" set to "<<value<<endl;
          }
    
          else{cout<<"invalid command"<<endl;}
    
          }
    

    vielleicht hat ja der eine oder der andere trotzdem noch einen verbesserungsvorschllag 😃


Anmelden zum Antworten