Schreiben Sie eine Schleife, in der Indexwerte eingelesen und die entsprechenden Feldelemente ausgegeben werden
- 
					
					
					
					
 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 xab, vergleichst in Zeile 8 abereingabemitN. Scheint nicht korrekt, da die Schleifenbedingung überhaupt nicht von der Antwortxabhä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 eingabeein[signed] intist, können auch negative Werte eingegeben werden, die du auch zurückweisen solltest.
 Gültige Eingaben sind also alle Werte zwischen0undN-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.. 
 
- 
					
					
					
					
 Wenn etwas eingegeben wird aus dem kein Integer extrahiert werden kann geht der stream in einen Fehlerzustand und gibt konvertiert zu boolfalse:#include <limits> // std::numeric_limits<> #include <cstddef> // std::size_t #include <cctype> // std::tolower() #include <numeric> // std::iota() #include <array> #include <iostream> std::istream& eat_whitespace_except_newline(std::istream &is) { for (int ch; std::isspace(ch = is.peek()) && ch != '\n'; is.get()); return is; } std::istream& ignore_line(std::istream &is) { return is.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); } std::istream& clear_and_ignore_line(std::istream &is) { is.clear(); return ignore_line(is); } int main() { std::array<int, 8> foo; std::iota(foo.begin(), foo.end(), 42); for (char again{ 'y' }; again == 'y'; std::cout.put('\n')) { std::size_t index; while (std::cout << "Index: ", !(std::cin >> index >> eat_whitespace_except_newline) || index >= foo.size() || std::cin.peek() != '\n') { std::cout << "Input error :(\n\n"; clear_and_ignore_line(std::cin); } std::cout << "foo[" << index << "]: " << foo[index] << '\n'; while (std::cout << "\nAgain? (y/n)\n", !(std::cin >> again >> eat_whitespace_except_newline) || (again = std::tolower(again)) != 'y' && again != 'n' || std::cin.peek() != '\n') { std::cout << "Input error :(\n\n"; clear_and_ignore_line(std::cin); } } }
 
 
			
			
		