Hallo,
Ich möchte mit fgets() mehrere Zeilen von der Standardeingabe einlesen.
Wie kriege ich es hin, dass die Eingabe durch das \n nicht abgeschlossen wird, sondern so lange weitergeht, bis der Benutzer ^D betätigt?
Danke schonmal!
Hallo,
Ich möchte mit fgets() mehrere Zeilen von der Standardeingabe einlesen.
Wie kriege ich es hin, dass die Eingabe durch das \n nicht abgeschlossen wird, sondern so lange weitergeht, bis der Benutzer ^D betätigt?
Danke schonmal!
Meinst du in C?
Probiers mal auf http://www.mrunix.de .
Spontan würde mir da read einfallen (man 2 read). Mit read gehts sehr schnell, wenn du nen großen Puffer angibst.
Wenn es das ist, was du meinst, kann ich dir auch ein Code-Beispiel geben.
MfG
Florian
Sie können sich nicht auf Ihre eigene Ignorier-Liste setzen.
Ctrl-D sendet EOF, und in dem Fall liefert fgets null zurück:
Code:while(fgets(...)) ...
main(k){for(k=0;k<125;++k)putchar((k+1)%25? ("[k<qFUF>XB]X=9V=hm9FC"[k/6]-52)&1<<k%6?64:32:10);}
Danke, genau danach habe ich gesucht!
Jetzt habe ich aber noch das Problem, dass das fgets() immer die vorherige Zeile überschreibt, ich möchte aber mehrere Zeilen in einen string einlesen und ihn danach ausgeben.
Hier ist der Code, an dem ich das probiert habe:
Ach ja, ich hätte vielleicht im Eröffnungspost schreiben sollen, dass es sich um C handelt.Code:#include <stdio.h> int main () { char eingabe[100]; while(fgets(eingabe,sizeof(eingabe),stdin)); printf ("%s",eingabe); return 0; }
Da sollte noch ein Test rein, ob 'gesamt' groß genug ist.Code:char gesamt[ ... ] char eingabe[100]; while(fgets(eingabe,sizeof(eingabe),stdin)) strcat(gesamt, eingabe);
main(k){for(k=0;k<125;++k)putchar((k+1)%25? ("[k<qFUF>XB]X=9V=hm9FC"[k/6]-52)&1<<k%6?64:32:10);}
Mein Programm sieht jetzt folgendermaßen aus:
Der Grund, warum ich die Zeichen einzeln ausgebe und erst ab dem fünften Zeichen anfange, ist der, dass mein Programm mir bei der Ausgabe des Gesamtstrings immer einige merkwürdige Zeichen vor die tatsächlich eingegebene Zeichenkette gehängt hat.Code:#include <stdio.h> #include <string.h> int main (void) { char gesamt[100], eingabe[100]; int c; while(fgets(eingabe,sizeof(eingabe),stdin)) { if (strlen(gesamt)+strlen(eingabe)>100) break; else strcat(gesamt, eingabe); } for (c=4;gesamt[c];c++) printf ("%c",gesamt[c]); return 0; }
Hat jemand eine Ahnung, was da vor sich geht?
gesamt ist nicht initialisiert. da stehen irgendwelche daten drin.Original geschrieben von Thaomir
Hat jemand eine Ahnung, was da vor sich geht?
dein problem lässt sich aber recht kurz und einfach lösen:
-jCode:#define BUF_SIZE 100 int main (void) { char buffer[BUF_SIZE]; char *p = buffer; while(fgets(p,BUF_SIZE-(p-buffer),stdin)) { p += strlen(p); } printf(buffer); }
"Oh my God!" "Smith will suffice" (Agent Smith, Matrix)
"The first rule of holes is: when you find yourself in one, stop digging." (PJ, Groklaw)
Das ist natürlich schöner als meine Version (dort hätte es auch char gesamt[...] = ""; heißen müssen).
Aber eine Anmerkung -
Das ist böse, bitte immer printf("%s", buffer) oder in dem Fall auch puts().Code:printf(buffer);
main(k){for(k=0;k<125;++k)putchar((k+1)%25? ("[k<qFUF>XB]X=9V=hm9FC"[k/6]-52)&1<<k%6?64:32:10);}
das printf() ist nur eine testausgabe, nicht sicherheitsrelevant. in "echtem" code sollte man das tunlichst vermeiden, da hast du recht. aber nun musst du auch erklären, warum das böse ist.Original geschrieben von denis
Das ist böse, bitte immer printf("%s", buffer) oder in dem Fall auch puts().
-j
"Oh my God!" "Smith will suffice" (Agent Smith, Matrix)
"The first rule of holes is: when you find yourself in one, stop digging." (PJ, Groklaw)
Weil das Programm bei Eingabe von '%s' o.ä. (im Idealfall) abstürzt. Sowas will man ja nicht.
Aber klar, ist in so einem Beispiel latte. Hätt ja sein können, dass Du, oder jemand anderes, dass wirklich mal so macht. Darum der Hinweis.
Geändert von denis (14.03.04 um 01:44 Uhr)
main(k){for(k=0;k<125;++k)putchar((k+1)%25? ("[k<qFUF>XB]X=9V=hm9FC"[k/6]-52)&1<<k%6?64:32:10);}
Lesezeichen