PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : scanf bricht bei leerzeichen ab



natanael
22-11-2006, 20:13
Hallo,
ich hab folgendes Problem. Ich möchte mit scanf("%s", string) eine Zeichenkette einlesen. Wenn ich das array string dann ausgabe wird es nur bis zum ersten Leerzeichen ausgegeben. Also, wenn ich "Hallo Welt" eingebe wird nur "Hallo" ausgegeben. Könnt ihr mir eventuell weiterhelfen?
Danke im voraus
Natanael

locus vivendi
22-11-2006, 20:27
ich hab folgendes Problem. Ich möchte mit scanf("%s", string) eine Zeichenkette einlesen. Wenn ich das array string dann ausgabe wird es nur bis zum ersten Leerzeichen ausgegeben. Also, wenn ich "Hallo Welt" eingebe wird nur "Hallo" ausgegeben. Könnt ihr mir eventuell weiterhelfen?
Dein scanf arbeitet korrekt. %s liest Nicht-Whitespace ein. Aber das könntest du auch eigentlich du lesen einer Beschreibung von scanf herausgefunden haben, oder?

Wenn du eine Zeichenkette einlesen willst, die der Benutzer durch drücken von "Return" beendet, dann kannst du das mit std::getline(stream, string) aus dem Header <string> machen, wenn du C++ verwendest.

peschmae
22-11-2006, 20:28
Das ist halt so bei scanf, soll auch so sein - schliesslich stehts ja so in der Doku ;)

Für Zeilenweises lesen kannst du fgets verwenden:
char *fgets(char *s, int size, FILE *stream);

(gets() gibts auch, aber das solltest du wegen Buffer-Overflow Gefahr nicht verwenden)

MfG Peschmä

natanael
22-11-2006, 20:47
Danke!
wo finde ich denn eine ordentliche C-Doku? Ich hab rumgegoogeld aber nichts gefunden.
Und den Zeilenumbruch, der dann am Ende entsteht entferne ich dann mit
"string[strlen(string)-1] = '\0';" ?

Boron
22-11-2006, 21:32
http://www.cppreference.com/index.html

natanael
22-11-2006, 22:10
Danke!
Die seite gefällt mir. Aber leider hab ich trotz gegoogle nicht gefunden, wie ich die Whitespaces am Ende des Strings entferne. mit "string[strlen(string)-1] = '\0';" hat das nciht so ganz funktioniert, wie ich mir dachte. Kennt da jemand ne Funktion?

Ok danke ich hab eine Funktion gefunden, die mir das erledigt.

Boron
23-11-2006, 17:39
Warum willst du das '\0' entfernen?
So wird in C das Stringende kenntlich gemacht!

Wenn das fehlt, wie soll dann z.B. die Funktion strcpy() funktionieren?
(Die soll man ja auch nicht nehmen, sondern die Variante strncpy() ;))

natanael
23-11-2006, 18:40
naja alle außer dem \0 sollen weg.
das \0 bleiben muss ist klar

Boron
23-11-2006, 21:53
Oha, habe ich mich verlesen.
Nur Leerzeichen entfernen, jetzt klar :o.

natanael
23-11-2006, 23:04
Ja, richtig aber wie am bequemsten mit C? Gibt es da schon ne fertige Funktion für in irgendeiner Bibliothek?

locus vivendi
24-11-2006, 08:45
Ja, richtig aber wie am bequemsten mit C? Gibt es da schon ne fertige Funktion für in irgendeiner Bibliothek?
Warum C? Würdest du C++ benutzen, könntest du std::getline verwenden und alle deine Probleme wären gelöst.