Fehler beim Einlesen eines Strings mit scanf()
-
Super, Danke!
Ich habe das nun wie unten im Code ausgebessert
Wie lese ich aber am besten einen String ein, wenn ich nicht weis, wieviele Zeichen der Benutzer eingibt?
void main(void) { char text[5]; printf("Bitte geben Sie 4 Zeichen ein! "); scanf("%s", text); printf("Eingegeben: %s",&text); fflush(stdin); //Tastaturpuffer löschen getchar(); }
-
Du kannst mit dem Array auch großzügiger sein
char text[1001]; printf("Bitte geben Sie 4 Zeichen ein! "); scanf("%1000s", text); // liest maximal 1000 Zeichen bis zum ersten Whitespace ein
oder besser, da du auch Leerzeichen einlesen kannst:
scanf("%1000[^\n]", text); // liest maximal 1000 Zeichen ein
bzw.:
fgets (text, 1001, stdin);
Wenn du beliebig viele Zeichen einlesen willst, musst du die einzeln (mit getchar()) einlesen und im (dann dynamischen besorgten) Speicher ablegen.
-
DirkB schrieb:
Wenn du beliebig viele Zeichen einlesen willst, musst du die einzeln (mit getchar()) einlesen und im (dann dynamischen besorgten) Speicher ablegen.
Wenn Du aber ein C-Programm schreibst, das (am besten noch in der Console) 1000 Zeichen Eingabe ohne return-Taste übersteigt, solltest Du das Konzept überarbeiten oder dir geistig gesunde Anwender suchen
Und 1 kb Speicher ist in der heutigen Zeit wohl eher nicht mehr das Problem.
-
ledi schrieb:
fflush(stdin); //Tastaturpuffer löschen
Das kannst du so nicht machen. fflush() ist für Inputstreams nicht definiert.
ISO-C1X, 7.21.5.2 schrieb:
If stream points to an output stream or an update stream in which the most recent operation was not input, the fflush function causes any unwritten data for that stream to be delivered to the host environment to be written to the file; otherwise, the behavior is undefined.
Was du da machst, ist also kein korrektes C. Du müsstest dir also die noch im Stream befindlichen Daten manuell rausziehen.
-
Ok!
Und wie geht das?
Kannst du mir dazu ein Beispiel geben?
-
Das steht in der FAQ vom Unterforum. Zu erreichen durch die Dropdown-Liste im Kopfbereich vom Unterforum (FAQ Index)
Oder direkt unter http://www.c-plusplus.net/forum/p1146014#1146014
-
Gib mal hier im Forum in der Suche:
fflush(stdin);
ein. Da sollte in den ersten Beiträgen etwas dazu stehen.
Wenn du schon dabei bist,
void main(...
ist nicht vom Normenausschuss abgesegnet. Nimm besser:
int main(...
MfG f.-th.
-
Also wenn ich das jetzt richtig verstanden habe:
while ((c = getchar()) != EOF && c != '\n');
Solange c kein End of file ist und keine ENTER-Taste gedrückt wurde, hole alles aus dem Puffer und speichere in c?
-
Ja.
-
Das wichtig(st)e dabei ist aber auch, dass das '\n' (die Enter-Taste) auch ausgelesen wird.
Das macht das scanf() nämlich nicht.