So nehmen Sie Leerzeichen in Eingabe in C

8

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%     
itsaboutcode 12.10.2009, 17:00
quelle

7 Antworten

14

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.

    
Carl Norum 12.10.2009, 17:02
quelle
7

Sie können etwas wie folgt ausprobieren:

%Vor%     
Nick Dandoulakis 12.10.2009 17:06
quelle
1

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() und dann 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:

%Vor%     
Chris Lutz 12.10.2009 17:30
quelle
0

Siehe fgets()

  

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.

%Vor%

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)

    
gimel 12.10.2009 17:06
quelle
0

Ich persönlich würde Fgets verwenden, aber das wurde bereits hier herausgestellt. Ein Weg der Doiung mit scanf wäre

%Vor%

Dies nimmt alle Zeichen auf, bis ein '\ n' gefunden wird.

    
MAK 12.10.2009 18:25
quelle
0

Wenn Sie die Eingabe bis zur neuen Zeile mit einem dynamischen Array innerhalb von struct verwenden möchten, kann dies nützlich sein:

%Vor%     
SidNoob 28.06.2013 03:16
quelle
0

Mein Stil.

%Vor%     
mim 18.02.2014 11:29
quelle

Tags und Links