strings mit leerzeichen einlesen?



  • wie kann man per "cin" strings mit leerzeichen einlesen?
    und kann man beim einlesen kontrollieren ob die eingabe vom richtigen typ war? z.B. dass bei int nicht n buchstabe eingegeben wird...
    thx



  • schnell die topic editiert? Fehler wohl selbst gefunden... es lag an der Deklaration der Variablen buch innerhalb der Schleife...



  • getline(cin,string);

    Devil



  • pixartist schrieb:

    z.B. dass bei int nicht n buchstabe eingegeben wird...
    thx

    Ja du kannst das failbit von cin überprüfen:

    int i;
    cin >> i;
    if(cin.fail()) cout "PANIK!!!";
    


  • T@W schrieb:

    schnell die topic editiert? Fehler wohl selbst gefunden... es lag an der Deklaration der Variablen buch innerhalb der Schleife...

    jop habs gemerkt 😉

    thx fürm die antworten!

    edit:
    getline(cin,newName);
    funzt nur halb irgendwie! ich kann den fehler nur schwer beschreiben! kannste die benutzung nochmal genauer erläutern? danke!
    die ganze funktion spinnt total rum gibts da nen bekannten bug?



  • hmmm cin.fail() hilft mir trotzdem nicht, denn wenn ich bei mir nen char oder string statt nen int eingebe, dann läuft mein programm immer wieder durch ohne anzuhalten!

    void main()
    {
    	int point;
    	string newName;
    	string newNumber;
    	Telefonbuch buch;
    	int toDelete;
    	string toFind;
    	while(true)
    	{
    		point = 0;
    		cout<<"-----------------------------"<<endl;
    		cout<<"Menue:"<<endl<<"1. Alle Nummern anzeigen | 2. Neuen Namen hinzufuegen"<<endl<<"3. Anzahl aller eintraege | 4. Eintrag loeschen"<<endl<<"5. Nummer suchen"<<endl;
    		cout<<"-----------------------------"<<endl;
    		cin.ignore(cin.rdbuf()->in_avail());
    		cin>>point;
    		point = int(point);
    		cin.ignore(cin.rdbuf()->in_avail());
    		switch(point)
    		{
    		case 1:
    			buch.list();
    			break;
    		case 2:
    
    			cout<<"Namen eingeben:"<<endl;
    			getline(cin,newName);
    			cout<<"Nummer eingeben:"<<endl;
    			getline(cin,newNumber);
    			buch.neuerName(newName, newNumber);
    			break;
    		case 3:
    			cout<<"Anzahl der Eintraege: "<<buch.anzahl()<<endl;
    			break;
    		case 4:
    			cout<<"Bitte id des zu loeschenden Eintrags angeben!"<<endl;
    			cin>>toDelete;
    //hier ist es:
    			if(!cin.fail())
    			{
    				if(toDelete>=0 && toDelete<=buch.anzahl()) {
    					cout<<buch.showName(toDelete-1)<<" wurde geloescht!"<<endl;
    					buch.loeschen(toDelete);
    
    				}
    				else
    				{
    					cout<<"Eintrag nicht gefunden"<<endl;
    				}
    			}
    			else
    			{
    				//was hier rein damit das programm nicht verrückt spielt?
    			}
    			break;
    			case 5:
    			cout<<"Bitte Namen angeben:"<<endl;
    			getline(cin,toFind);
    			if(buch.hasName(toFind))
    				cout<<"Die Nummer von "<<toFind<<" ist "<<buch.findNummer(toFind)<<". Seine ID ist "<<buch.findIdByNummer(toFind)+1<<"."<<endl;
    			else
    				cout<<"Der Name wurde nicht gefunden!"<<endl;
    			break;
    		default:
    			break;
    		}
    	}
    
    }
    


  • Hallo,

    entweder break; (dann bricht die Schleife ganz ab) oder das hier:

    cin.clear();
    cin.ignore(cin.rdbuf()->in_avail());
    cin.get();
    

    Dann wird die Eingabe wiederholt...


Anmelden zum Antworten