cin wird übersprungen

foexle

foexle

Kaiser
Sers leute ich bin hier fast am verzeifeln
Code:
const int LAENGE=200;


        char* kette;
        char puffer[LAENGE];
                 cout << "Bitte Zeichenkette angeben :" <<endl;
        	 cin.getline(puffer, LAENGE);
        	 
        	 kette = new char[strlen(puffer)+1];
        	 strncpy(kette, puffer, strlen(puffer)+1);        
                
                cout << "Bitte das zu suchende Zeichen angeben: ";
                cin >> zeichen;

der überspringt einfach das cin.getline ... hab natürlich dann die länge 0 wenn ich den speicher allokieren will

aber wiso zur hölle überspringt der das? °°
 
hi,

ich glaube dass du auch mit dem restlichen code rausruecken musst, ich kann naemlich auch keinen Fehler finden, und bei mir macht es auch das was es soll. Dass das noch nicht alles ist schliesse ich mal aus den komischen Einrueckungen ;)

Hast du selber mal versucht den code den du gepostet hast in ein eigenes Programm zu stecken, und geguckt ob es funktioniert? ;)

mfg,
bytepool
 
also das komische an der geschichte ist nicht nur ich bin am rätseln ;)

aber ich poste mal den gesamten code ... das ist ja sowiso nur ein kleines bsp proggi

Code:
#include <iostream>
#include "suche.cpp"



using namespace std;


const int LAENGE=20;




int main(){
	//variablen deklaration
        char* kette = new char[LAENGE];
        int auswahl = 0;
        char* wort;
        char zeichen;
        char tmp;
        char * puffer;

        cout << "Was wollen sie ?\n 1 = nach Char suchen \n 2 = nach String suchen \n 3 = Strings vergleichen"
<< endl ;
        cin >> auswahl;

       

        



        if (auswahl == 1){ //Zeichen Suchen in der Zeichenkette
        	
        	 //einlesen der Zeichenkette und allokieren des Rams
        	 cout << "Bitte Zeichenkette angeben :" ;
        	 cin >> kette;
        	 

             cout << "Bitte das zu suchende Zeichen angeben: ";
             cin >> zeichen;        	 
        	 
        	 
        	 tmp = searchChar(kette,zeichen);

        	 printf("%i",tmp);
                
              
        } 
        else if(auswahl==2){//Substring in Zeichenkette suchen
        	//einlesen der Zeichenkette und allokieren des Rams
        	cout << "Bitte Zeichenkette angeben :" ;
        	cin >> kette;
       		
        	//Einlesen der 2. Zeichenkette und allokieren des Speichers
            cout <<"Bitte zu suchenden String eingeben: ";
            cin >> puffer;
            wort = new char[strlen(puffer)+1];
            strncpy(wort,puffer,strlen(puffer)+1);
                
            tmp = searchString(kette, wort);  
            
            printf("%i",tmp);
                
         }
         else if(auswahl==3){//2 Strings vergleichen
       
        	 //einlesen der Zeichenkette und allokieren des Rams
         	cout << "Bitte Zeichenkette angeben :" ;
         	cin.getline(kette,LAENGE);
      	
         	
         	//Einlesen der 2. Zeichenkette und allokieren des Speichers
            cout <<"Bitte zu suchenden String eingeben: ";
            cin >> puffer;
            wort = new char[strlen(puffer)+1];
            strncpy(wort,puffer,strlen(puffer)+1);
            
            tmp = compateString(kette,wort);
            printf("%i",tmp);
        	 

                

         }




}

bei auswahl 3 überspringt der jegliche eingabe ... wenn ich cin.getline weg mache gehts ....
aber ich brauch cin.getline :>

mfg
 
1. Dein Code kompiliert nicht, da Du 'suche.cpp' nicht mitgeliefert hast.
2. Es ist ungewoehnlich, eine cpp-Datei miteinzuschliessen
3. Was sagt denn gdb an dieser Stelle? Kannst Du das Ergebnis von getline ausgeben, ebenso den Rueckgabewert? Vielleicht ist noch ein Zeichen im stdin-Puffer, den getline einliest.
 
huhu doch kompeliert wunderbar :) das proggi funzt auch bis auf menüpunkt 3 in der cin ist ...
nein der debugger sagt mir ga nix, da der die stelle auch einfach überspringt.
einen ausgabe wert bekomme ich nicht, weil ich nicht die möglichkeit bekomme etwas einzugeben.

Und ja es ist ungewöhnliche eine sourcefile einzubinden, das sollte aber nur zur übersichtlichkeit dienen :)

einen rückgabe wert bekomme ich keinen, da ich keinen wert der function übergeben kann, da ich keine möglichkeit habe auf die standart-eingabe zu gelangen, weil er das alles überspringt so lange ich cin.getline benutze :)
 
hi,

huhu doch kompeliert wunderbar :) das proggi funzt auch bis auf menüpunkt 3 in der cin ist ...

dass du das kompilieren kannst ist klar, aber wir koennen das nicht. Und solange der Fehler nicht reproduzierbar ist, ist das hier irgendwie brotlose Kunst, jedenfalls in so einem Fall wo kein offensichtlicher Fehler erkennbar ist.

mfg,
bytepool
 
Code:
#include <iostream>
#include <cstring>



int searchString(const char* kette, char* kette2){
        int posi=-1;
        char * tmp = kette2;
        do{
        	if(*kette==*kette2){
        		posi=0;
        	}
        	else if(*kette!=*kette2){
        		posi = -1;
        	}
        	if (*kette2!=true){
        		return posi;
        	}
        	else if (posi == 0){
        		*kette2++;
        	}
        	else if (posi== -1 && kette2!=tmp){
        		*kette--;
        	}
        	
        	
        }while(*++kette);
        
        return posi;
}

int compateString(const char* string1,const char* string2){
		int ackn = 0;
		do{
			if(*string1 == ' '){
				while(*string1==' '){
					*string1++;
				}
			}
			if(*string2==' '){
				while(*string2== ' '){
					*string2++;
				}
			}
			if(*string1!= *string2){
				ackn=-1;
			}
			else if(*string1 == *string2){
				*string2++;
			}
		}while(*++string1);
	return ackn;
}

int searchChar(char* kette, char zeichen){
        char* posi = kette;
        int zaehler=0;

        do //mit index 0 anfangen
        {
          if (*posi==zeichen){
           return zaehler;
          }
          ++zaehler;
        } while (*++posi); //inkrementieren und überprüfen in einem
        return -1; //not-found
       
}

dann mal hier die andere cpp :>

und ich weis das da noch ein fehler drin ist

Code:
if (*kette2!=true){
das das hier nicht geht weis ich ... aber mir ist noch nix anderes eingefallen :>

und bitte keine kommentare wiso ich das so umständlich mit pointern mache wofür es ne menge sehr gute und schnell functions gibt :) das weis ich ... aber ich muss das so machen
 
Man sollte sich schon etwas mehr um Eingaben kümmern.
Du schreibst einfach "cin >> auswahl;" und hoffst, dass es so klappt .. aber wie soll sich das Programm beispielsweise verhalten, wenn keine Zahl eingegeben wird?

Naja, wie auch immer, einmal
Code:
cin.ignore(INT_MAX, '\n');
vor dem getline() sollte helfen.
 
Das Problem scheint das "cin >> puffer;" zu sein. puffer ist ein nichtinitialisierter Speicher, also produziert diese Zeile einen Zugriffsfehler.
 
zur vollständigkeit...

das cin.ignore hat geholfen ... anscheinend ist das return auch noch auf dem stream

danke und mfg
 

Ähnliche Themen

Problem mit Texteingabe

string Problem mit strcmp

noch eine zeichenkette^^

wirre zeichen :(

C++ und xerces - Probleme beim komplieren

Zurück
Oben