Schreiben Sie eine Schleife, in der Indexwerte eingelesen und die entsprechenden Feldelemente ausgegeben werden



  • @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 zwischen 0 und N-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);
    		}
    	}
    }
    

Log in to reply