Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Scheiss C-strings!

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
27.10.2003, 11:21 Uhr
HRI-Dummy



Hi!

Kann mir jemand erzaehlen, warum fgets nichts einliest?
Beispiel:

char text[1024];

print("Bitte text eingeben!");
fgets(text,1024,stdin);

Nach der Ausgabe von printf muesste das Programm ja eigentlich auf eine Eingabe warten, tut es aber nicht, sondern es geht einfach weiter und gibt einen leeren String zurueck. Das gleiche uebrigens mit getchar in einer while-Schleife.
Hab echt schon alles versucht...
Ich wuerde ja scanf benutzen, hab aber keine Ahnung, wie ich scanf dazu kriege nach einem Leerzeichen weiterzulesen (der String kann uebrigens beliebig viele Woerter enthalten).
Danke im Vorraus falls jemand Antwort weiss.

PS: Den anderen Thread zu dem Thema hab ich schon gelesen, deshalb habe ich es ja mit fgets versucht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
27.10.2003, 11:26 Uhr
geissbock




C++:
char code[255];
fgets(code,256,stdin);


so habe ich es. und es funzt. kann es mir nicht erklären wieso es bei dir nicht geht. vielleicht doch ein anderer fehler?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
27.10.2003, 11:30 Uhr
HRI-Dummy



Muss wohl, aber wie finde ich den?
Weisst Du nicht vielleicht, wie ich mit scanf nach einem eingegebenen Leerzeichen weiterlesen kann?
scanf ist das einzige, was im Prgorammablauf wirklich auf eine Eingabe wartet.
Verstehen muss ich das auch nicht!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
27.10.2003, 11:37 Uhr
geissbock



scanf ließt eingabefelder ein. diese werden durch leerzeichen getrennt. also ist es nicht so einfach möglich über das leerzeichen hinauszulesen. du kannst aber mehrere eingabefelder einlesen. aber ich denke das es auch irgentwie mit fgets bei dir gehen muss. und das wäre um einiges einfacher.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
27.10.2003, 11:40 Uhr
geissbock



oder wie wäre es mit gets?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
27.10.2003, 11:44 Uhr
~dingsbums
Gast


dein stdin zieger wird verstellt sein, verwende einfach gets
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
27.10.2003, 11:50 Uhr
HRI-Dummy



gets habe ich auch schon versucht, der wartet genausowenig auf Eingabe wie fgets oder getchar. Nur scanf wartet auf eine Eingabe.
Ausserdem habe ich von der Firma ein Verbot mit gets zu arbeiten, scheiss Coding Conventions...
Das mit dem stdin pointer klingt irgendwie einleuchtend, wenn das das Problem waere, wie koennte ich es dann beheben?
Oder wie lese ich mehrere Eingabefelder mit scanf?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
27.10.2003, 12:21 Uhr
~dingsbums
Gast


du liest ascii? such dir den ascci code für "end of line", also die zugehörige zahl, ruf scanf so soft auf bis das letzte zeichen des eingelesenen strings "endofline" ist, habs schon lang nicht mehr gemacht aber so kommste weiter....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
27.10.2003, 12:48 Uhr
HRI-Dummy



ok, das probiere ich mal, danke.
Mal sehen obs funktioniert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
27.10.2003, 13:29 Uhr
0xdeadbeef
Gott
(Operator)


Vielleicht kriegen sich die Ein-Ausgabe-Streams in die Haare. Versuchs mal so:

C++:
char text[1024];
printf("Text eingeben: ");
fflush(stdout);
fgets(text, 1024, stdin);


Das ist allerdings ziemlich ins Blaue geschossen. gets würde ich nicht verwenden, weil es unsicher ist. Damit bist du nachher anfällig für Buffer overflows. Dasselbe gilt für das einlesen von Strings mit scanf.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 27.10.2003 um 13:30 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: