nummerlänge verursacht programmabsturz



  • Tach,

    Ich habe versucht ein programm zu schreiben welches sich nummer name und nachname merkt, jedoch stürzt das programm ab sobald ich eine etwas längere nummer eingebe (handynummer halt):

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
    	char wahl;
    	do
    	{
    	cout << "Wieviele Kontakte hinzufuegen?\n";
    	int i;
    	cin >> i;
    	int j;
    	char name [20];          //ich habs zuerst mit string versucht,
    	char nachname [20];      //siehe unten
    	long nummer;             //long müsste für eine handynummer doch                         
    	for (j=0; j<i; j++)      //locker reichen?
    	{
    		cout << "Name: \n";
    		cin >> name;
    		cout << "Nachname: \n";
    		cin >> nachname;
    		cout << "Nummer: \n";
    		cin >> nummer;
    	}
    	cout << "beenden? (y/n)\n";
    	cin  >> wahl;
    	}while (wahl = 'y');
    
    return 0;
    }
    

    ich wollte statt dem array ein string benutzen aber der compiler hat den string in verbindung mit cin >> nicht angenommen 😕



  • Ich würde alles in einem string speichern. Da eine Nummer ja ev. auch noch ein + drin hat, je nachdem, wie der User das eingeben mag. Dann kannst du die Zahlen extrahieren und halt schauen, ob da noch ein + drin war.

    Das hier sollte wunderbar funktionieren:

    #include <iostream>
    #include <string>
    
    int main ()
    {
     std::string str;
    
     std::cin >> str;
     std::cout << str << std::endl;
    }
    


  • danke klappt soweit, nur wenn ich bei name einen doppelname eingebe überspringt er die Nachfrage nach dem nachnamen:

    Name: hans-peter
    Nachname:
    Nummer:2542325
    

    weis jemand wieso?



  • Fahrstuhlmusik schrieb:

    danke klappt soweit, nur wenn ich bei name einen doppelname eingebe überspringt er die Nachfrage nach dem nachnamen:

    Name: hans-peter
    Nachname:
    Nummer:2542325
    

    weis jemand wieso?

    Das ist weil der >> - Operator bist zu einem Whitespace einliest. Da kannst du dann getline benutzen, um die ganze Linie einzulesen.


Anmelden zum Antworten