Frage zu fgets() und den letzten 2 Werten vom String
-
ich habe mir gerade bei "C von A bis Z" von Galileo-Computing folgenden Quelltext zur Überprüfung von einem Passwort angeschaut:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define PASSWORT "Schiller" #define MAX 10 void chomp(char *str) { size_t p=strlen(str); str[p-1]='\0'; } int main(void) { char pswd[MAX]; printf("Passwort: "); fgets(pswd, MAX, stdin); chomp(pswd); if(strcmp(PASSWORT, pswd) == 0) printf("Willkommen\n"); else printf("Passwort falsch\n"); return EXIT_SUCCESS; }
bei dem Beispiel wird ja das vorletzte Zeichen '\n' überschrieben, damit strcmp() die Überprüfung richtig macht.
nun meine Frage:
Warum wird mir bei der Ausgabe auf der Konsole trotzdem ein Zeilenumbruch gebracht.
Müsste normalerweiße der "Willkommen"-text nicht sofort hinter der Passworteingabe auftauchen?Gruß tridane
-
das scheint eine eigenschaft der konsole zu sein, das wenn man die enter-taste betätigt, die zeile umbrochen wird.
kugge mal dies:
int main() { char pswd[11]; scanf("%10s", pswd); scanf("%10s", pswd); scanf("%10s", pswd); fgets(pswd,10, stdin ); fgets(pswd,10, stdin ); fgets(pswd,10, stdin ); return 0; }
wenn man das ausführt, stellt man fest, das nach jeder eingabe ein zeilen-umbruch stattfindet
mfg Dr. N.
-
Du gibst ja auch das Enter ein - warum sollte das plötzlich verschwinden? Der Rest vom Passwort steht ja auch noch dort...
chomp() entfernt dir das \n aus dem string. Dh wenn du den string ausgibst wird kein \n mitausgegeben...
-
jo stimmt, habs grad nochmal in Ruhe getestet.
Danke euch beiden