[gelöst] Struktur/Schleife/Strings



  • ok du warst schneller als ich mit dem editieren 😃



  • @Gucky

    wenn ich

    fflush(stdin);

    einschiebe erscheint folgende Fehlermeldung
    error 'fflush' was not declared in this scope
    error 'stdin' was not declared in this scope



  • aha ok,
    das hört sich ganz danach an, als ob da noch etwas im Puffer steckt, und er dann einfach das Zeichen aus dem Puffer nimmt.
    Das heißt für dich, dass du z.B. am Ende der Schleife die noch im Puffer stehenden Zeichen verwirfst.

    Bei mir funktioniert es immer mit

    cin.sync();
    

    ... das kannst du mal versuchen. Es kann allerdings sein, dass es bei dir so nicht funktioniert, dann müssen wir es anders machen. 😉

    lg



  • @Gugelmoser

    Vielen dank das hat super geklappt.
    hätte man das Problem auch durch intialisieren des Feldes lösen können??



  • armes_schwein schrieb:

    @Gugelmoser

    Vielen dank das hat super geklappt.
    hätte man das Problem auch durch intialisieren des Feldes lösen können??

    äh nein, das hat nichts mit Initialisierungen zu tun.
    Wenn etwas im Puffer steckt, dann steckt einfach etwas im Puffer.
    Wieso allerdings etwas im Puffer steckt, obwohl du nichts falsches eingeben hast (nehme ich an), weiß ich nicht, vielleicht kann dazu jemand was sagen?

    lg



  • ich hab gerade gelesen das fflush windows spezifisch ist
    so jetzt müsste es gehen:

    #include <iostream>
    #include <string>
    #include <limits>
    
    using namespace std; 
    
    struct Anbieter 
    { 
    	string Name; 
    	int Pn; 
    	int Preis; 
    }; 
    
    Anbieter Feld[3]; 
    
    int main() 
    { 
    	int i=0; 
    
    	for(i=0;i<3;i++) 
    	{ 
    
    		cout<<"Name: " << endl;
    
    		getline(cin, Feld[i].Name);
    
    		cout << Feld[i].Name << endl;
    		cout<<"Produktnummer: " << endl; 
    		cin>>Feld[i].Pn; 
    		cout<<"Preis: " << endl; 
    		cin>>Feld[i].Preis;
    		cin.ignore(numeric_limits<streamsize>::max(), '\n');
    	} 
    	return 0; 
    }
    


  • Gucky schrieb:

    ich hab gerade gelesen das fflush windows spezifisch ist

    Ist es nicht. Aber fflush(stdin) ist undefiniertes Verhalten.



  • bei mir (visual c++ 2010) geht es 🙂

    http://www.c-plusplus.net/forum/61595
    der letzte beitrag



  • @Glucky: Vielen Dank. habe deine Lösung ausprobiert und die geht auch.

    @Gugelmoser: Nagut das ist wahrscheinlich für meinem Anfängerzustand zu viel.
    Auf jeden Fall nochmals vielen Dank an alle

    lg 🙂



  • Gucky schrieb:

    bei mir (visual c++ 2010) geht es 🙂

    Dir ist die Bedeutung von undefiniertem Verhalten aber hoffentlich bekannt?

    Und dein Link bestätigt meine Aussage nur...



  • ja ist es mir und dann hab ich da grad was falsch verstanden..



  • Da es hier gerade ums "Zeichen verwerfen" geht, wollte ich gerade mal fragen, warum cin.sync() nicht immer funktioniert?

    C++ Reference:

    Synchronizes the buffer associated with the stream to its controlled input sequence. This effectively means that the unread characters in the buffer are discarded.

    In einem anderen Forum hat einer folgendes geschrieben:

    std::cin.sync() sagt der C++-Std. nirgendwo zu, dass die Zeichen verworfen werden.

    Diese 2 Aussagen widersprechen sich ja nun...
    Also wie ist es letztendlich mit cin.sync()? Wann kann man davon ausgehen, dass es funktioniert, und wann nicht?

    lg



  • @armes_schwein: bitte künftig die [cpp]-Tags benutzen, macht den Code besser lesbar 🙂


Anmelden zum Antworten