Schreiben Sie eine Schleife, in der Indexwerte eingelesen und die entsprechenden Feldelemente ausgegeben werden
-
@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..
-
Wenn etwas eingegeben wird aus dem kein Integer extrahiert werden kann geht der stream in einen Fehlerzustand und gibt konvertiert zu
bool
false
:#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); } } }