Ich wollte das Zeichenarray von der Konsole nehmen und es enthält auch Leerzeichen, die einzige Methode, die ich in C kenne, ist scanf, aber es fehlt die Eingabe, sobald es mit Leerraum getroffen wurde. Was sollte ich tun?
Hier ist was ich tue.
%Vor%Versuchen Sie es mit fgets (). Es liest eine komplette Zeile aus einem Stream Ihrer Wahl (stdin, ich denke, Sie suchen). Ein Beispiel für Ihren Fall:
%Vor% fgets () liest maximal die Anzahl der im zweiten Argument übergebenen Zeichen (minus eins). Kein Pufferüberlauf, und Sie erhalten die gesamte Zeile mit einem Zeilenumbruchzeichen (oder bis zu EOF). Beachten Sie, dass, da eine maximale Anzahl von zu lesenden Zeichen einer der Parameter ist, es möglich ist, dass Sie eine teilweise Zeile erhalten. Überprüfen Sie, ob das letzte Zeichen in der zurückgegebenen Zeichenfolge '\ n' ist und Sie wissen, dass Sie eine vollständige Zeile erhalten haben. EOF-Erkennung ist auch ziemlich einfach; Ein NULL
Rückgabewert und eine Überprüfung auf errno
sollten Ihnen helfen.
Danke an Chris (unten) für den Punkt über Teillinien.
Es gibt Möglichkeiten, dies mit% co_de zu tun % , aber meiner bescheidenen Meinung nach werden sie schnell hässlich. Das übliche Muster (das überraschenderweise noch nicht erwähnt wurde) besteht darin, die Zeichenfolge mit scanf()
fgets()
, um es zu verarbeiten. sscanf()
funktioniert wie sscanf()
, nur verarbeitet es den Standard-Eingabestream und verarbeitet eine Zeichenfolge, die Sie übergeben (genauso wie scanf()
und printf()
verwandt sind). Die Grundlagen:
Siehe fgets()
%Vor%
fgets()
liest maximal einen Zeichen weniger als die Größe aus dem Stream ein und speichert sie in dem Puffer, auf den s zeigt. Das Lesen stoppt nach einem EOF oder einem Zeilenumbruch. Wenn eine neue Zeile gelesen wird, wird sie im Puffer gespeichert. Ein '\ 0' wird nach dem letzten Zeichen im Puffer gespeichert.
Weitere Details sind in vielen SO-Fragen verfügbar, zum Beispiel input-string-through-scanf .
(Aufgrund der großen Nachfrage wurde der Verweis auf gets()
entfernt)
Tags und Links c whitespace scanf