überprüfung ob der wert eine zahl ist



  • hallo erstmal, bin neu hier 🙂

    hab irgendwoher aus dem forum den befehl wie man eine eingabe überprüft ob es eine zahl ist, aber das ganze würde in meinem fall so aussehen:

    cout<<"\n\nGeben sie bitte folgende Werte ein im Format 'XX' oder 'XX.XX'\n[z.B.: 10 oder 10.70]"<<endl<<endl;
    		cout<<"Kaufpreis in Euro: ";
    
    		while(!(cin>>kaufpreis)) 		
    			{ 
    				cin.clear(); 
    				cin.ignore(cin.rdbuf()->in_avail());  
    				cout<<"Hinweis: Ungueltige Eingabe!"<<endl;
    				cout<<"Bitte geben sie den Kaufpreis in Euro erneut ein: ";
    			}
    
    		cout<<"Verkaufspreis in Euro: ";
    
    		while(!(cin>>verkaufspreis))
    			{ 
    				cin.clear(); 
    				cin.ignore(cin.rdbuf()->in_avail());  
    				cout<<"Hinweis: Ungueltige Eingabe!"<<endl;
    				cout<<"Bitte geben sie den Verkaufspreis in Euro erneut ein: ";
    			}
    
    		cout<<"Laufzeit in Jahren: ";
    
    		while(!(cin>>laufzeit))
    			{ 
    				cin.clear(); 
    				cin.ignore(cin.rdbuf()->in_avail());  
    				cout<<"Hinweis: Ungueltige Eingabe!"<<endl;
    				cout<<"Bitte geben sie die Laufzeit in Jahren erneut ein: ";
    			}
    
    		cout<<"Versicherungspraemie pro Jahr in Euro: ";
    
    		while(!(cin>>versicherung))
    			{ 
    				cin.clear(); 
    				cin.ignore(cin.rdbuf()->in_avail());  
    				cout<<"Hinweis: Ungueltige Eingabe!"<<endl;
    				cout<<"Bitte geben sie die Versicherungspraemie pro Jahr in Euro erneut ein: ";
    			}
    
    		cout<<"Jaehrliche Nebengebuehren (z.B. Wartung, Garage, ...) in Euro: ";
    
    		while(!(cin>>nebengebuehren))
    			{ 
    				cin.clear(); 
    				cin.ignore(cin.rdbuf()->in_avail());  
    				cout<<"Hinweis: Ungueltige Eingabe!"<<endl;
    				cout<<"Bitte geben sie die jaehrlichen Nebengebuehren (z.B. Wartung, Garage, ...) in Euro erneut ein: ";
    			}
    
    		cout<<"Gefahrene Kilometer pro Jahr: ";
    
    		while(!(cin>>kilometer))
    			{ 
    				cin.clear(); 
    				cin.ignore(cin.rdbuf()->in_avail());  
    				cout<<"Hinweis: Ungueltige Eingabe!"<<endl;
    				cout<<"Bitte geben sie die gefahrenen Kilometer pro Jahr erneut ein: ";
    			}
    
    		cout<<"Treibstoffkosten pro Liter in Euro: ";
    
    		while(!(cin>>treibstoff))
    			{ 
    				cin.clear(); 
    				cin.ignore(cin.rdbuf()->in_avail());  
    				cout<<"Hinweis: Ungueltige Eingabe!"<<endl;
    				cout<<"Bitte geben sie die Treibstoffkosten pro Liter in Euro erneut ein: ";
    			}
    
    		cout<<"Verbrauch pro 100km in Liter: ";
    
    		while(!(cin>>verbrauch))
    			{ 
    				cin.clear(); 
    				cin.ignore(cin.rdbuf()->in_avail());  
    				cout<<"Hinweis: Ungueltige Eingabe!"<<endl;
    				cout<<"Bitte geben sie den Verbrauch pro 100km in Liter erneut ein: ";
    			}
    
    		cout<<"Reparaturkosten in Euro: ";
    
    		while(!(cin>>reparatur))
    			{ 
    				cin.clear(); 
    				cin.ignore(cin.rdbuf()->in_avail());  
    				cout<<"Hinweis: Ungueltige Eingabe!"<<endl;
    				cout<<"Bitte geben sie die Reparaturkosten in Euro erneut ein: ";
    			}
    

    geht das ganze auch einfacher?! 😕



  • Mit atoi oder atof, kannst Du einen Char-string in ein int oder float umrechnen lassen.



  • es geht aber darum, wenn ein buchstabe/wort eingegeben wird, dass man aufgefordert wird eine zahl einzugeben [bzw "üngultige eingabe" erscheint"]



  • Ja und, wenn Buchstaben vor der Zahl stehn, wird 0 zurückgegeben, sonst die Zahl.



  • daishi schrieb:

    Ja und, wenn Buchstaben vor der Zahl stehn, wird 0 zurückgegeben, sonst die Zahl.

    Also ist 0 keine Zahl? 😉



  • @daishi: atof liefert aber ein double und kein float.



  • MFK schrieb:

    Also ist 0 keine Zahl? 😉

    Kommt auf den Körper an.



  • aso, falls man beides durcheinander eingibt, ok alles klar danke
    wie würde das gehen wenn man überprüft ob ein buchstabe vorkommt wenn es gemischt ist wie zb "b23as"?
    und das ganze einfacher geht wohl nicht oder?



  • Du köntest mit strtok einen String auf die Existenz von von tokens hin untersuchen lassen und dann den rest ausgeben.
    Es ist auch mit strstr nach bestimmten Teilstrings zu suchen.
    Schau Dir einfach mal die Cahr-string Routinen an.



  • Du kannst auch sowas in der Art machen:

    std::string str;
    while(str.find_first_not_of("0123456789") != std::string::npos) {
      // hole den String
    }
    

Anmelden zum Antworten