[gelöst] Struktur/Schleife/Strings
-
Hallo
bin dabei für eine Klausur zu lernen und habe folgendes Problem:
"Die Anbieterdaten
Schreiben Sie ein Programm, dass zunächst eine Struktur „Anbieter“ anlegt. Ein Anbieter soll aus einem Namen, einer eindeutigen Produktnummer und einem Preis bestehen.Ihr Programm soll in der Lage sein, drei Anbieter zu verwalten.1.Schreiben Sie zunächst eine Funktion, die die Daten von den drei Anbietern einliest. ...."
Die Fragestellung geht noch weiter aber ich habe schon bei der ersten Funktion das Problem dass der Compiler beim 2. Durchgang einfach die erste Frage ignoriert!!
Ich weiss wirklich nicht weiter
.Hier ist der Ausschnitt aus meiner Lösung. Bitte Bitte Helfen
#include <iostream> 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: "; getline(cin,Feld[i].Name); cout<<"Produktnummer: "; cin>>Feld[i].Pn; cout<<"Preis: "; cin>>Feld[i].Preis; } return 0; }
-
es fehlt #include <string>
-
Hallo Glucky,
danke für die schnelle Antwort. habe es mit # include <string> probiert aber der Fehler bleibt.
-
armes_schwein schrieb:
habe es mit # include <string> probiert aber der Fehler bleibt.
huhu,
der Fehler bleibt ist keine Fehlerbeschreibung.
Du musst uns die Fehlerbeschreibung posten + den aktuellen Quellcode.
lg
-
hast du ein problem mit getline??
wenn ja, probier mal das:cout << "Name: " fflush(stdin); getline(cin, Feld[i].Name);
-
@ Gugelmoser :
Hallo. Also mein Problem ist das sich das Programm was ich da geschrieben habe zwar compilieren läßt jedoch nicht so läuft wie ich es gedacht habe. Was ich konkret damit meine ist das der Compiler beim ersten durchgang folgender SChleife
for(i=0;i<3;i++) { cout<<"Name: "; getline(cin,Feld[i].Name); cout<<"Produktnummer: "; cin>>Feld[i].Pn; cout<<"Preis: "; cin>>Feld[i].Preis;korrekter weise mich nach
Name: ...
Produktnummer:...
Preis:....fragt
ab dem zweiten durchgang jedoch Name ignoriert:
Name: Produktnummer: ...
Preis: ...@Gucky: Deswegen vermute ich das mit meinem getline was nicht Stimmt. An der Schleife kann ich keinen Fehler erkennen.
-
ok du warst schneller als ich mit dem editieren

-
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 allelg

-
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
