[gelöst] scanf fordert keine Eingabe
-
Guten Abend.
Ich hab ein Problem.
Nachdem man eine 1 tippt,überspringt das Programm die formatierte Eingabe (scanf).
Angezeigt wird mir dann: Welches Zeichen? =Gesuchtes Zeichen =WIESO?!
Hier der kleine Ausschnitt aus der Funktion. Füge lieber nicht den kompletten Code um es übersichtlicher zu halten.int wahl; char z; printf("Nach einem Zeichen= 1 oder einer Kette= 2 suchen?\n(1/2) ? = "); scanf("%d", &wahl); if(wahl == 1){ printf("Welches Zeichen? ="); scanf("%c", &z); printf("Gesuchtes Zeichen = %c\n", z); }
-
scanf liest nur die Zeichen ein, die zum Formatspecifier passen.
Bei %d sind das halt nur Ziffern (und ein evtl Vorzeichen)
Das '\n' von der Entertaste bleibt im Eingabestrom stehen.
Das wird dann beim %c eingelesen.Lösung: schreib ein Leerzeichen vor das %c. Da überliest scanf sog Whitespace (Lerrzeichen Tabulatoren, Zeilenvorschub).
scanf(" %c", &z);
-
uiuiui, Danke dir! Da hab ich jetzt wieder was neues gelernt. Klasse!Dieser Sachverhalt wurde garnicht in den Vorlesungen angesprochen. Kein Wunder das ich 2 Std vergeblich gesucht habe...
-
Normalerweise überliest scanf auch Whitespace am Anfang von jedem Parameter, nur eben nicht bei %c und %[
Ein Problem dabei ist, dass du bei Fehleingaben da nicht mehr raus kommst.
Dann kann man nach dem scanf den Rest der Eingabe noch einlesen: http://www.c-plusplus.net/forum/p1146014#1146014
-
hmm ok.
Hat das was jetzt kommt auch was damit zu tun oder hab ich nen Fehler in meiner Syntax?
Prob: Tippe ich ein Zeichen, welches im Text vorhanden ist, komm ich aus dem Eingabemodus nicht mehr raus. Tippe ich ein Zeichen welches nicht vorhanden ist, ist alles ok und bekomme die gewünschte antwort.char z; printf("Welches Zeichen? ="); scanf(" %c", &z); // Whitespace wurde beachtet printf("Gesuchtes Zeichen = %c", z); strcat(textA, textB); char *zges = strchr(textA, z); // zges = zeichen gesucht if(zges){ int i, count1=0; for(i=1; strlen(textA); i++){ count1 = count1 +1; } printf("%s\nenthält %d mal das Zeichen %c\n", textA, count1, z); } else{ printf("Das gesuchte Zeichen = %c kommt im Text= \n%sNICHT vor\n", z, textA); }
-
KFF7 schrieb:
for(i=1; strlen(textA); i++){ count1 = count1 +1;
}
An diesem Code ist fast alles falsch:
- Ein Array fängt in C immer beim Index 0 an.
- Die Bedingung ist immer wahr, wenn textA Zeichen enthält.
. Dann ist strlen(textA) ungleich 0 und somit wahr. (strlen ist an der Stelle blöd, da sich die Länge nicht ändert aber jedesmal geprüft wird)
. Da fehlt der Vergleich mit dem Laufindex i.- Wo ist der Vergleich ob das Zeichen am Index i das gesuchte ist?
for(i=0; textA[i] != '\0'; i++){ Hier der Vergleich auf Zeichen und evtl Zählung }
-
ooman...ich bin einer...
danke das du mich auf die Punkte hingewiesen hast.
ich habs Hierdurch dann lösen können:
char z; printf("Welches Zeichen? ="); scanf(" %c", &z); printf("Gesuchtes Zeichen = %c\n\n", z); strcat(textA, textB); int max= strlen(textA); char *zges = strchr(textA, z); // zges = zeichen-gesucht if(zges){ int i, count1=0; for(i=0; i<=max; i++){ if(textA[i] == z){ count1 = count1 +1; } } printf("%senthält %d mal das Zeichen %c\n", textA, count1, z); } else{ printf("Das gesuchte Zeichen = %c kommt im Text= \n%sNICHT vor\n", z, textA); }