Schreiben Sie eine Schleife, in der Indexwerte eingelesen und die entsprechenden Feldelemente ausgegeben werden
-
Hallo Coder!
Die [Erweiterung der] Aufgabe lautet:
Schreiben Sie eine Schleife, in der Indexwerte eingelesen und die
entsprechenden Feldelemente ausgegeben werden. Fragen Sie am Ende der Schleife
ab: " Weiter [j/n]?" und wiederholen Sie bei Eingabe von 'j'. Falls ein Index
außerhalb des erlaubten Bereichs eingegeben wird, soll eine Fehlermeldung ausgegeben
werden.Sehe langsam nur noch Sternchen, und schaffe es nicht diesen teil korrekt umzusetzen, und die Felder abzufragen.
Brauche keine endgültige Lösung, mehr einen Hinweis, wie ich den Code (besonders der do-while Teil) vereinfachen kann, sodass die Umsetzung nicht so hakt..Vielen Dank!Hier mein Code bisher:
#include <iostream> #include <string> using namespace std; int main(){ const int N = 5; int arr[N]; char x; int eingabe; for (int i = 0; i < N; i++){ cout << "<"; cin >> arr[i]; } for (int i = 0; i < N; i++){ cout << arr[i]; } cout << endl; do{ cout << ">>" << endl; cin >> eingabe; cout << arr[eingabe] << endl; do { cout << "weitermachen? j/n" << endl; cin >> x; } while(eingabe>N); cout << "Fehler!" << endl; } while (x != 'j'); cout << "ENDE" << endl; system ("pause"); return 0; }
-
while(true)
Index?
Wenn index ausserhalb => Meldung, continue
Ausgabe
Weiter?
Wenn nichtt j => break
-
@euphor Die Reihenfolge etwas sortieren, das "weitermachen ist etwas deplaziert"
Die do-while-Schleife wird solange ausgeführt, solange die Bedingung wahr ist.
-
Egal wie ich es auch drehe..
Momentan sieht eder code so aus und trotzdem bekomm ich das Programm nicht richtig beendet, bzw frei von Endlosloops:
do{ cout << ">>" << endl; cin >> eingabe; cout << arr[eingabe] << endl; cout <<"weitermachen? j/n" << endl; cin >> x; }while(eingabe<N); if(x!= 'j'){ cout << "Ende" << endl; } if(eingabe>N){ cout << "Fehler!" << endl; }
-
Deine Schleife geht von Zeile 1 bis 8. In Zeile 7 fragst du die Antwort nach
x
ab, vergleichst in Zeile 8 abereingabe
mitN
. Scheint nicht korrekt, da die Schleifenbedingung überhaupt nicht von der Antwortx
abhängt.Außerdem: deine Einrückung ist mangelhaft. Benutze clang-format oder irgendein anderes automatisches Formatierungstool. Wenn korrekt eingerückt ist, siehst du gleich viel besser, welche Schleifen/Befehle zusammengehören.
-
do { do { Eingabe Index while (index ok) Ausgabe Frage weitermachen Antwort einlesen while ( weitermachen == 'j')
-
@wob
Gebe mir Mühe mit der Formatierung. Nur leider hier am BiBrechner kein VS und progge online auf cpp.sh. Muss da alles manuell schieben.
-
@euphor Allgemeiner Tipp wäre: möglichst nicht zu tief verschachten. Wenn es tiefer wird, ist ziemlich sicher die Zeit für eine Funktion gekommen.
-
@wob
Absolut. Dies hat aber bisher ebenfalls noch nicht funktioniert. Deshalb dachte ich mir das Ganze eben auf diesem Wege zu veranschaulichen.
Versuche gerade DirkB's vorschlag umzusetzen.
-
@DirkB
So in etwa? Werds fuer heute liegen lassen. Mir dreht sich schon alles..Danke bis hierhin!do{ do { cout << ">>" << endl; cin >> eingabe; } while (eingabe <=N); cout << arr[eingabe] << endl; cout << "weitermachen? j/n" << endl; cin >> x; if (eingabe >N){ cout << "Fehler!" << endl; } } while(x = 'j');
-
@euphor sagte in Schreiben Sie eine Schleife, in der Indexwerte eingelesen und die entsprechenden Feldelemente ausgegeben werden:
while(x = 'j');
Du musst Warnungen anschalten...
PS: Ich finde die Variante von @manni66 leichter zu verstehen.
-
@wob
Waren an. Komm nur nichtmehr richtig hinterher. Aber klar, hier an der Stelle natürlich while(x!= 'j')
-
@euphor sagte in Schreiben Sie eine Schleife, in der Indexwerte eingelesen und die entsprechenden Feldelemente ausgegeben werden:
Aber klar, hier an der Stelle natürlich while(x!= 'j')
Ähm, ich hätte jetzt eher == gedacht...
-
@wob
Upsi..
-
Nein, denk noch mal nach!
Und deine erste Schleife macht so auch keinen Sinn (solange die Eingabe kleiner oder gleich N ist wird die Schleife bei dir wiederholt).
Und die Fehlermeldung sollte dann wohl auch in diese Schleife und nicht dahinter!
-
Last but not least.
do{ do { cout << ">>" << endl; cin >> eingabe; if (eingabe >N){ cout << "Fehler!" << endl; } } while (eingabe >=N); cout << arr[eingabe] << endl; cout << "weitermachen? j/n" << endl; cin >> x; }while(x == 'j');
Freu mich gerade sehr. Danke für die tolle Unterstützung. Hoffe ich kann in Zukunft weiter unangenehme Fragen stellen
-
Fast
Die Bedingung in Zeile 5 sollte die gleiche sein, wie in Zeile 9.
-
Das
eingabe
ein[signed] int
ist, können auch negative Werte eingegeben werden, die du auch zurückweisen solltest.
Gültige Eingaben sind also alle Werte zwischen0
undN-1
.
-
Bonusaufgabe: fang ab, wenn ein Buchstabe satt einer Zahl eingegeben wird.
-
Die Erweiterung zum Ausschluss von negativen Zahlen:
do{ do { cout << ">>" << endl; cin >> eingabe; if (eingabe >N || eingabe < 0){ cout << "Fehler!" << endl; } } while (eingabe >N || eingabe < 0); cout << arr[eingabe] << endl; cout << "weitermachen? j/n" << endl; cin >> x; }while(x == 'j'); cout << "ENDE" << endl;
Wie ich definitieren soll, dass ausschließlich Integer eingegeben werden dürfen erschließt sich mir noch nicht so richtig..