getchar und die Eingabetaste
-
Hallo
ich bearbeite grade eine kleine Aufgabe in der beliebig oft Zeichen eingelesen werden sollen. Als Ausgabe soll dann die Anzahl der Klein-, Großbuchstaben und Zahlen kommen.
Ich hab das einfach per getchar() und if-Abfragen gelöst.
Mein Problem ist jetzt das "Enter" zum bestätigen der Eingabe.
Denn "Enter" an sich ist ja auch eine Eingabe, womit meine Schleife direkt zweimal durchläuft...Erst hatte ich die Ausgabe der Zähler auch außerhalb der Schleife, was ja auch besser ist imo, aber dank des doppelgemoppel optisch einfach doof war ^^
Hat jemand einen Tip wie ich verhindern kann, dass "Enter" als Eingabe gesehen wird, oder dass bei "Enter" die Ausgabe quasi übersprungen wird und auch der "Eingabetext" nicht zu sehen ist?
Thx schon mal
#include <stdio.h> #include <stdlib.h> int gross; int klein; int zahl; double eingabe; int main() { while(eingabe !='1') { printf("\nGeben Sie ein Zeichen ein:"); eingabe = getchar(); if(eingabe >= 'a' && eingabe <= 'z') { klein++; printf("\nklein = %i",klein); printf("\ngross = %i",gross); printf("\nzahl = %i", zahl); } if(eingabe >='A' && eingabe <='Z') { gross++; printf("\nklein = %i",klein); printf("\ngross = %i",gross); printf("\nzahl = %i", zahl); } if(eingabe >='0' && eingabe <= '9') { zahl++; printf("\nklein = %i",klein); printf("\ngross = %i",gross); printf("\nzahl = %i", zahl); } } return 0; }
-
Nimm die Entertaste als Endekennung. Das Zeichen ist '\n'
Keine globale Variablen.
getchar() liefert ein int und kein double.
Es gibt zum testen auf bestimmte Zeichen auch fertige Funktionen.
Schau mal in ctype.hDeine Ausgabe (die 3 printf) reicht einmal nach den if
-
Ok, danke schon mal.
Aber ich vermute die Extraanzeige durch das "Enter" werd ich nicht raus bekommen... immerhin wurde die Eingabe ja schon gemacht.Gibts denn außer über meinen Weg und ohne die vorgefertigten Funktionen noch andere Möglichkeiten die Art der Eingabe abzufragen?
-
Gimmick schrieb:
Ok, danke schon mal.
Aber ich vermute die Extraanzeige durch das "Enter" werd ich nicht raus bekommen... immerhin wurde die Eingabe ja schon gemacht.Gibts denn außer über meinen Weg und ohne die vorgefertigten Funktionen noch andere Möglichkeiten die Art der Eingabe abzufragen?
Ja, aber das ist dann nicht mehr plattformunahängig. Für Windows kannst du z.B. kbhit und getch verwenden.
#include <conio.h> #include <stdio.h> int main() { for (;;) { if (kbhit()) // Wurde eine Taste gedrückt? { char c = getch(); // Welche Taste wurde gedrückt? printf("Zeichen: %c\n", c); } } }
-
Ach, jetzt habe ich dein Problem erst verstanden, glaube ich.
Ersetz
eingabe = getchar();
mal durch
while ((eingabe = getchar()) == '\n');
-
Okayyyy,
while ((eingabe = getchar()) == '\n');
hat 1a funktioniert. Aber ich versteh es nicht. ^^
Kannst du noch was dazu sagen?
-
Ach so, dass heisst einfach "während eingabe = \n tue .. nichts"?
-
...