tastatur eingaben
-
hi,
ich möchte in meinem programm die möglichkeit haben, wörter einzugeben. was mit den wörtern gemacht wird ist nich das problem, sondern die eingabe der wörter. die funktion gets akzeptiert mein compiler (gcc) nicht weil sie unsicher ist, bei scanf und fgets wird die stelle im programm später ausgelassen, d.h. diese funktionen nimmt er auch nicht. welche funktion würdet ihr mir empfehlen?
-
Realmaker schrieb:
hi,
ich möchte in meinem programm die möglichkeit haben, wörter einzugeben. was mit den wörtern gemacht wird ist nich das problem, sondern die eingabe der wörter. die funktion gets akzeptiert mein compiler (gcc) nicht weil sie unsicher ist, bei scanf und fgets wird die stelle im programm später ausgelassen, d.h. diese funktionen nimmt er auch nicht. welche funktion würdet ihr mir empfehlen?Ich würde #include <stdio.h> und fgets empfehlen. Desweiteren scheint dein Shift-Taste defekt zu sein.
Gruß Tobias
-
Hm, ich habe es jetzt mal mit fgets versucht, nur wenn ich das Programm ausführe, wird die Stelle wieder übersprungen. Der Compiler meldet aber keinen Fehler.
fgets(sp,30,datei);
-
glaube
fgets(string,sizeof(string),stdin);
dürfte klappen
gruß
-
fgets(sp,sizeof(sp),stdin);
klappt auch nicht =I
-
sorry dann weiß ich auch nicht... am besten du postest den source ausschnitt...
unter linux hatte ich auch mal so ein prob glaub habe es mit fflush(stdin); lösen könnengood luck
-
int woerter() { FILE *datei; datei = fopen ( "vok.txt" , "a+" ); char sp[30], dt[30]; printf("Spanisches Wort: "); fgets(sp,sizeof(sp),stdin); fflush(stdin); printf("%c\n",sp); printf("Deutsches Wort: "); fgets(dt,sizeof(dt),stdin); fflush(stdin); return 0; }
-
Dieses
fflush(stdin);
wird zwar wahrscheinlich bei euch funktionieren, ist aber nicht standardkonform.
("Diese Funktion leer den Puffer, [...].
Nach ANSI C ist das Verhalten undefiniert, wenn es sich um einen Eingabe-Stream
handelt. Die meisten Compiler leeren dann den Puffer.")gruß,
walker
-
ich erlaube mir mal den code ein wenig umzuschreiben....
int woerter() { FILE *datei; datei = fopen ( "vok.txt" , "a+" ); if(!datei) // falls datei nicht erstellt oder im write modus geöffnet werden kann return -1; char sp[30], dt[30]; printf("Spanisches Wort: "); fgets(sp,sizeof(sp),stdin); fflush(stdin); // printf("%c\n",sp); war der fehler, dass nur ein Zeichen ausgegeben wurde? printf("%s\n",sp); // "%s" steht für string "%c" für char printf("Deutsches Wort: "); fgets(dt,sizeof(dt),stdin); fflush(stdin); fclose(datei); return 0; }
sorry hab kein gcc zur zeit. unter vc++ läuft der code und dass ohne fflush(stdin);
good luck
-
Hm, also ich rufe die Funktion in einer Schleife auf. Jedesmal nachdem ihr das spanische Wort eingegeben hab lasse ich es mir testweise ausgeben, nur es wird nur ab dem 2. Durchlauf ausgegeben
-
ich schreib den code jetzt so, wie ich ihn schreiben würde.... wie gesagt unter vc++
int woerter() { FILE *datei; char sp[30]="", dt[30]=""; // bei reinem darf man variablen nicht mitten in der funktion deklarieren datei = fopen ( "vok.txt" , "a+" ); if(!datei) // falls datei nicht erstellt oder im write modus geöffnet werden kann return -1; // char sp[30], dt[30]; printf("Spanisches Wort: "); fgets(sp,sizeof(sp),stdin); fflush(stdin); fputs(sp,datei); // schreiben in datei // printf("%c\n",sp); war der fehler, dass nur ein Zeichen ausgegeben wurde? printf("%s",sp); // "%s" steht für string "%c" für char printf("Deutsches Wort: "); fgets(dt,sizeof(dt),stdin); fflush(stdin); fputs(dt,datei); // schreiben in datei fclose(datei); return 0; }
btw fgets hängt char 13,10 also "\n" mit an den string
sonst weiß ich auch nichts mehr
good luck
-
ich weiß woran es lag: Ich hab den Buffer vor der ersten Eingabe komplett leeren lassen und dann hat's geklappt. Danke an alle!