Zeichenfolge bis EOF einlesen
-
Ich möchte eine Zeichenfolge einlesen welche sich über mehrer zeilen erstreckt und in einen string speichern. zb.
789789438 (enter)
455(enter)
strg-dchar zeile[100]; while (gets(zeile) != EOF); puts(Zeile);
ich kann so lang ich will die tastenkomination drücken er hört nicht auf einzulesen
-
Guck dir mal eine Referenz zu gets() an. Und zwar aus zwei Gründen:
1. Gucken, was gets() zurück gibt und wie gets() das Dateiende anzeigt.
2. Gucken, warum man gets() niemals benutzen sollte und was es als Alternativen gibt.
-
hab es jetzt umgeändert , jedoch funktioniert es immer noch nicht wie es soll. die einlesen stopt zwar mit eof aber er gibt nur die letze zeile aus.
#define Max_Laenge 1000 char zeile[Max_Laenge]; while (fgets(zeile,Max_Laenge,stdin) != NULL); fputs(zeile,stdout);
-
Du hast ein Semikolon zu viel.
-
und wo soll das sein?
also ich möchte :
12345(enter)
678(enter)
strg-dund dann in einem string gespeichert 12345678
-
Schau dir nochmal genau die Syntax für Schleifen an.
-
char zeile[Max_Laenge]; while (fgets(zeile,Max_Laenge,stdin) != NULL) {} fputs(zeile,stdout);
ändert aber nichts daran das es nicht geht
-
Ach so, schon gut.
Hätte deinen Post lesen sollen.
Nein, du musst in einen Puffer lesen und den dann an den großen anhängen.
-
musste es jetzt so machen
char zeile[Max_Laenge],puffer[Max_Laenge],zahl[10]; while (fgets(puffer,Max_Laenge,stdin) != NULL){ int l; l=strlen(puffer)-1; strncat(zeile,puffer,l); } fputs(zeile,stdout);
relativ aufwendig für so was einfaches aber naja es geht ^^ danke
-
Du kannst auch gleich an die richtige Stelle einlesen, dann brauchst du das strncat nicht.
char zeile[Max_Laenge],puffer[Max_Laenge],zahl[10]; int l = 0; while (fgets(puffer+l,Max_Laenge-l,stdin) != NULL){ l=strlen(puffer)-1; } fputs(zeile,stdout);
Oder versuch es doch mal mit
fread
. Den Stringterminator musst du dann allerdings selber anhängen.char zeile[Max_Laenge]; size_t l; l = fread(line, 1, Max_Laenge-1, stdin); *(puffer+l) = '\0';