Texteingabe mit Leertaste beenden (Klausuraufgabe)



  • DirkB schrieb:

    @DrakoXP
    1023 ist aber nicht beliebig oft.

    Kannst du das mal genauer erklären? Der Satz ergibt so für mich gerade keinen Sinn...

    EDIT:
    okay, denke jetzt hab ichs...
    aber wenn es darum geht, ist keiner der Pufferansätze korrekt, weder der vom TS noch der von Wutz.
    In dem Fall kann man wirklich nur die Zeichen einzeln einlesen und direkt mitzählen, wie viele groß, klein und numerisch waren.

    Zur Eingabe ohne auf Enter zu warten:
    Unter Windows könntest du getch() verwenden (conio.h... Compiler-abhängig,
    insofern unportabel, aber eben sehr praktisch ;p).
    Für Linux gibt es eine Möglichkeit die getch-Funtkion nachzubauen,
    siehe hier: http://www.c-plusplus.net/forum/39509



  • So lautet die Aufgabe:

    glückspirat schrieb:

    In einem C-Programm sollen bis zur Eingabe der Leertaste beliebig oft Zeichen von der Tastatur eingelesen werden. Nach zeicheneingabe soll die Anzahl der eingegebenen Zeichen, Groß- und Kleinbuchstaben sowie Ziffern ausgegeben werden.

    Deine Eingabe ist auf 1023 Zeichen begrenzt.



  • Danke an euch für die schnellen Antworten.
    @DrakoXP:
    Tut mir leid wenn ich das jetzt etwas Plump sagen muss... ich verstehs nicht und iwie funktionierts auch nicht... der Rest kommt später 😉

    DirkB schrieb:

    Du brauchst: http://www.cplusplus.com/reference/clibrary/cstdio/getchar/
    Da gibt es sogar fast das Beispiel das du brauchst.

    Ok was ich schon mal verstanden habe: die AUfgabe ist mit getchar/getch zu lösen. Bin ich auf jedenfall schon mal weiter. schöne seite

    @Wutz:
    Find ich gut, versteh ich, klingt logisch. Ich hab jetzt mal das Programm einfach kopiert und ausgeführt, funktioniert nicht. Der geht nicht in die break! Wenn ich aus getchar, getch gehts nur da kann ich mich nicht schreiben sehen. Das mit dem gehtchar und getch habe ich leider nicht so wirklich verstanden...

    LG Manu



  • Das Beispiel funktioniert, irgendwas machst du falsch.

    http://ideone.com/0CKQG



  • Das Programm funktioniert in sofern, dass bist zur Eingabe der Leertaste alle Zeichen gespeichert werden und abgerufen. Mein Problem ist, dass die EIngabemöglichkeit definitiv nicht mit eingabe der Leertaste endet und mit dem Programmablauf fortfährt sondern trotzdem auf die Enter Taste wartet. Erst nach Eingabe dieser gehts ohne Probleme weiter, es soll doch aber direkt nach der Leertasten eingabe weiter gehen.

    So viel kann ich mit Kopieren und Einfügen doch nicht falsch machen 😕



  • glückspirat schrieb:

    So viel kann ich mit Kopieren und Einfügen doch nicht falsch machen 😕

    Du hast auch nichts falsch gemacht. Dieses Verhalten liegt am System und nicht an deinem Programm. Dein Programm kann nur aus stdin lesen, aber z.B. Windows schreibt die Daten erst nach stdin nach dem du Enter gedrückt hast. Vorher sind diese Daten für dich unsichtbar und du hast keinen Einfluss darauf.

    Wenn du das Verhalten doch haben möchtest, musst du Systemfunktionen nutzen, z.B. getch(). (getche() geht auch, produziert sogar ein Echo auf der Konsole.)



  • Nochmal zu mitschreiben:
    Es gibt keine standardkonforme Möglichkeit, auf stdin ohne Blockierung zu arbeiten, es wird immer auf das erste Vorkommen von '\n' bzw. im Ausnahmefall auf EOF gewartet, bevor das Programm weiterlaufen kann (und die gepufferten Zeichen abräumen kann).
    Alle auf stdin arbeitenden Standardfunktionen (scanf,getchar,...) arbeiten so.



  • DrakoXP schrieb:

    scanf("%1023s", buffer);
    }
    

    Ist falsch im Sinne der genannten Aufgabenstellung, da %s bekanntlich bei jedem Whitespace abbricht, also z.B. auch bei '\t' und nicht nur bei ' '.



  • @Wutz: hatten wir die Lösung nicht ohnehin schon ausgeschlossen? 🙄

    aber zum Problem, dass du bei getch() nichts siehst:
    nimm getche(), das gibt das eingegebene Zeichen nochmal aus ("echo")



  • Perfekt jetzt funktionierts, vielen dank an euch!


Anmelden zum Antworten