String auf int untersuchen



  • Hallo Leute,

    ich habe hier mal 2 Versionen. Die erste hat mir immer gut geholfen.
    Ich schätze in C++ sollte man aber auf die 2. Variante zurückgreifen.
    Jedoch brauch ich da mal ein paar Tipps, wie man die Fehlerbehandlung richtig macht. So wie es jetzt ist, funktioniert es zwar, aber gefallen tut mit das nicht.

    std::string buffer;
    	int dummy;  
    	POS pbuff;
    
    	// Reading X Axis   using 'old' sscanf
    	std::cout << "\nEnter X : ";
    
    	int rv = 0;
    	do{ 		
    		getline(std::cin, buffer);	
    	    rv = sscanf(buffer.c_str(), "%d", &dummy);   //ich könnte hier gleich pbuff.X nehmen, mehr dazu in Frage 2
    	}while( rv != 1);
    
    	pbuff.X = dummy;
    
    	// Reading Y Axis using stringstream
    
    	std::cout << "\nEnter Y : "; 
    
    	int chk;  
    	do{
    		chk = 0;
    		getline(std::cin, buffer);
    		std::stringstream input_scan(buffer) ; 
    
    		if (! (input_scan >> pbuff.Y) ){
    		    chk = 1;
    		}
    
    	}while( chk == 1 );
    

    Dann habe ich noch eine Frage, bzgl . der push_back funktion bei Vektoren:

    Sieht jetzt ungefähr so aus

    main.cpp:

    std::vector<POS> PRG_1;   // Pos ist ne struct von mir die X, Y , Z als int enthält
    
    fill(PRG_1);
    

    dazu fill.cpp:

    void fill(std::vector<POS> &myVec){
    
    	POS dummy;
    	char c;
    	int chk;
    	const int ignore_size = 256;
    
    	do{
    
    	chk = 0;
    	std::cout << "Enter new Point ? < y / n > ";
    	std::cin >> c;
    	std::cin.ignore(ignore_size, '\n');
    
    	   switch (c){
    
    	   	case 'y'   : dummy = fill(); 
    		   	 	     myVec.push_back(dummy); 
    		   	 	     chk = 1;
    					 break;
    
    	   	case 'n'   : std::cout << "\nBye\n" ; break;  
    	   	default    : std::cout << "\nsth. went wrong...";  chk = 1;  break;	
    	   }
    
       }while (chk == 1);
    

    und fill.cpp:

    POS fill(){
    
    	 // code aus erstem Beispiel
    
    	// Reading X Axis   using 'old' sscanf
    	 	return pbuff;
    
    } // End Fill
    

    Die Frage nun, für die Push_Back "funktion" brauche ich immer einen Dummy oder? Also ich muss meine Werte erst mal irgendwo rein speichern und kann diese dann mit push_back in den Vektor bringen. Ohne Zwischenspeichern geht nicht oder?



  • Statt

    dummy = fill();
    myVec.push_back(dummy);
    

    kannste auch schreiben

    myVec.push_back(fill());
    


  • Ok, da ich ja nen Return Wert habe. Ansonsten muss ich also erstmal wo speichern und dann push_back ´en.

    Wie schaut´s mit den stringstream aus? Kann man das so lassen oder prüft man da irgendwie mit ???.fail() oder so ?


Log in to reply