Endlos schleife gezaubert :/ need help
-
int x[20]; for(int i=0;x[i]!=0;i++) { printf("Geben Sie einen Wert ein:"); scanf("%d",&x[i]); printf("x[i]=%d\n",x[i]); }Will eigentlich dass die Schleife aufhört sobald ich null eingebe.
Sorry für die einfache frage bin total Anfänger :/.
-
Du solltest nicht zwei Mal inkrementieren (Schleifenkopf und -rumpf). Zudem ist das eher C, also nimm nächstes Mal das richtige Unterforum.
-
baaah stimmt das is noch ein rest von dem mal als ich versucht habe das mit ner while schleife zu machen aber es funktioniert auch so nicht.
Hm wie kann kompletten Beitrag verschieben oder löschen ?
-
int x[20]; for(int i = 0; i < 20; ++i) { cout << "Gib einen Wert ein: "; cin >> x[i]; if ( x[i] == 0 ) break; cout << "X[" << i << "] = " << x[i] << endl; }
-
ah stimmt mit break :D.
Aber kann mir jemand sagen warum meins nicht funktioniert ?Ah ich glaub ich weiss wieso vielleicht weil vor der überprüfung inkrementiert wird :/?
-
Die For-Bedingung wird nach der Initialisierungs- bzw. Aktualisierungsanweisung geprüft. Darum solltest du die Abfrage mit einem
ifwie bei Skym0sh0 in den Schleifenrumpf verlagern.So, wie du es jetzt machst, greifst du sowieso auch auf uninitialisierte Werte zu. Das Verhalten kann also bei jedem Programmdurchlauf anders sein (wenn z.B. der Fall eintritt, dass x[0] == 0 ist).
-
jo stimmt.
so funst es nun glaub ich aber kann man das noch verbessern ?
int x[20]; x[0]=1; for(int i=0;i<20;i++) { printf("Geben Sie einen Wert ein:"); scanf("%d",&x[i]); if(x[i]==0) break; }
-
Jetzt musst du das erste Element nicht mehr initialisieren, da du es ja gleich mit
scanf()überschreibst, bevor du darauf zugreifst.Ansonsten: Man könnte
std::coutundstd::cinverwenden...
Und einfach schauen, dass du nicht mehr als 20 Elemente einliest (...wieder ein Vorteil in C++).

-
vector<int> x(20, -1); for(int i = 0; i < 20, x[i] != 0; i++) { int tmp; cout << "Geben Sie einen Wert ein: "; cin >> tmp; x[i] = tmp; }so in der art
ist aber nicht schön und auch sehr unübersichtlich
ausserdem ist es gut wenn du mal C++ sprechen würdest...
-
Skym0sh0 schrieb:
so in der art
ist aber nicht schön und auch sehr unübersichtlichIch würde es wenn schon mit
push_back()machen, sonst hat man eigentlich keine Vorteile gegenüber einem normalen Array.