Nach drücken von Enter weiter machen mit der for schleife.



  • Hallo,

    ich muss C++ für mein E-Technik Studium lernen.

    Jetzt habe ich aus meinem Buch eine Aufgabe ohne Lösung und komme nicht weiter.

    Die Aufgabe ist, die ersten 100 Quaratszahlen anzeigen zu lassen und nach
    jeder 10ten soll so lange unterbrochen werden bis man Enter drückt.

    Meine Lösung

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    int main()
    {
    	long loop;
    	long quad;
    	long zen; 
    	int enter;
    	for (loop = 1; loop <= 100; ++loop)
    		{
    			quad = loop * loop;
    			zen = quad % 10;
    			cout << quad << endl;
    			if (zen == 0)
    			{
    				cout << "Bitte druecken Sie Enter";
    				bool enter;
    				cin >> enter;
    			}
    
    		}	
    
    	return 0;
    }
    

    Tja, es geht soweit auch 1a, er zeigt nach den ersten 10 auch den Text.
    Allerdings bewirkt ein "Enter" nichts. Eine andere Taste mit anschliesendem Enter lässt die Schleife weiter laufen, jedoch stoppt sie dann nicht mehr
    bei den nächsten zehn 😃

    Kann mir da jemand einen Tipp geben?

    Gruß
    Snatch



  • Muss es nicht

    quad = loop * loop;
    zen = loop % 10;
    cout << quad << endl;
    if (zen == 0)
    

    sein?



  • da du ja iostream schon included hast (gibts dafür eigentlich ein gescheites eigedeutschtes Wort, wie inkludiert?)

    verwende einfach, wenn die enter-Abfrage kommen soll getchar();
    Dieses reagiert nur auf die Enter-taste deiner Tastatur.



  • Falls alles nichts hilft, nimm getch() aus conio.h.
    Allerdings kein C++-Standard, sondern Marke uralt. Funktioniert aber immer perfekt, weil primitiv. 😉



  • getch() nimmt aber alle Tasten an, dass er glaube ich nicht möchte^^



  • Ja, das ist richtig. Wenn man getchar() aus der Bibliothek <cstdio> verwendet, wird die Eingabe zunächst in einem Puffer gespeichert. Erst nach Eingabe von <Enter> erfolgt die Rückgabe gemäß int getchar().



  • Speedy_92 schrieb:

    Muss es nicht

    quad = loop * loop;
    zen = loop % 10;
    cout << quad << endl;
    if (zen == 0)
    

    sein?

    Ich glaube nicht, denn er funktioniert ja, bis auf das annehmen der Entertaste,
    wenn ich "cin >> enter;" entferne schreibt er brav unter jedes 10te mal den text aus "cout". Von daher sollte das stimmen.

    Habe es nun raus bekommen....

    #include <iostream>
    #include <cmath>
    #include <stdio.h>
    using namespace std;
    
    int main()
    {
    	long loop;
    	long quad;
    	long zen; 
    	for (loop = 1; loop <= 100; ++loop)
    		{
    			quad = loop * loop;
    			zen = quad % 10;
    			cout << quad << endl;
    			if (zen == 0)
    			{
    				cout << "Bitte druecken Sie Enter";
    				char enter = getchar();
    
    			}
    
    		}	
    
    	return 0;
    }
    

    So geht es 1a.

    Habe das mit dem getchar() zwar noch nicht verstanden, aber da lese ich mich nun mal ein.

    Danke nochmals.



  • Na, jetzt hast Du es schon soweit geschafft. Ich habe mal noch ein paar Kleinigkeiten geändert, damit Du darüber nachdenkst.

    #include <iostream>
    #include <cstdio>
    
    int main()
    {
        for (long loop = 1; loop <= 100; ++loop)
        {
            long quad, zen;
            quad = loop * loop;
            zen  = quad % 10;
            std::cout << loop << '\t' << quad << '\n';
            if (!zen)
            {
                std::cout << "Press \"Enter\", please.";
                getchar();
            }
        }
    }
    

    Achte z.B. auf den "Scope" der Variablen.



  • Erhard Henkes schrieb:

    Na, jetzt hast Du es schon soweit geschafft. Ich habe mal noch ein paar Kleinigkeiten geändert, damit Du darüber nachdenkst.

    #include <iostream>
    #include <cstdio>
    
    int main()
    {
        for (long loop = 1; loop <= 100; ++loop)
        {
            long quad, zen;
            quad = loop * loop;
            zen  = quad % 10;
            std::cout << loop << '\t' << quad << '\n';
            if (!zen)
            {
                std::cout << "Press \"Enter\", please.";
                getchar();
            }
        }
    }
    

    Achte z.B. auf den "Scope" der Variablen.

    Danke dir, werde ich mir gut anschauen.
    So etwas hilft ungemein.

    Echt klasse, dass ihr euch so eine Mühe macht, so lernt man am meisten.
    Und Lernen ist mit 31 gar nicht mehr so weit.

    noch besser wäre das gewesen:

    getch() <conio.h> : Diese Funktion ist defakto Standard und funktioniert 
    ähnlich wie getchar(). Mit dem Unterschied, dass der Benutzer auch wirklich nur 
    maximal ein Zeichen eingeben kann. Außerdem erzeugt getch() kein Echo auf der 
    Konsole, d.H. der Benutzer sieht nicht was er eingibt (geeignet z.B. für kleine
     Spiele oder die Eingabe eines Passwortes).
    

    Leider geht unter Linux <conio.h> nicht. Er findet die Datei nicht.
    Ich versuche das mal morgen auf Arbeit unter win.

    Danke.



  • Und Lernen ist mit 31 gar nicht mehr so weit.

    ... und Du bist noch nicht mal ein "Best Ager", wie soll das weiter gehen? 😉

    Hier ein wirklich brauchbares C++-Tutorial, das Dir vermutlich weiter hilft:
    http://www.cpp-tutor.de/cpp/intro/toc.htm

    Leider geht unter Linux <conio.h> nicht. Er findet die Datei nicht.

    Hier kannst Du gleich noch ein wenig Englisch üben: 🙂
    http://www.linuxquestions.org/questions/programming-9/pausing-the-screen-44573/



  • Erhard Henkes schrieb:

    Leider geht unter Linux <conio.h> nicht. Er findet die Datei nicht.

    Hier kannst Du gleich noch ein wenig Englisch üben: 🙂
    http://www.linuxquestions.org/questions/programming-9/pausing-the-screen-44573/

    Warum üben? Das steht nunmal in der Konsole 😃

    snatch@notebook:~/c++/übungen$ g++ test.cpp
    test.cpp:3:19: error: conio.h: Datei oder Verzeichnis nicht gefunden
    snatch@notebook:~/c++/übungen$
    

    Grüßle



  • conio gibt es unter Linux eben nicht. Das ist ja auch kein Standardheader sondern orginal von Borland.
    Bei Linux könntest du mal nach ncurses schauen.



  • Braunstein schrieb:

    conio gibt es unter Linux eben nicht. Das ist ja auch kein Standardheader sondern orginal von Borland.
    Bei Linux könntest du mal nach ncurses schauen.

    Jup, das dachte ich mir, ich habe nur das mit dem Englisch üben nicht verstanden 😃





  • will keiner getchar() aus der iostream verwenden ?


Anmelden zum Antworten