6 Stimmen

wie man eine Zeichenkette aus einer \n abgegrenzte Datei

Ich versuche, eine durch Rückgabe getrennte Datei voller Phrasen zu lesen.

Ich versuche, jede Phrase in eine Zeichenkette zu packen.

Das Problem ist, dass, wenn ich versuche, die Datei mit

fscanf(file,"%50s\n",string);

Die Zeichenfolge enthält nur ein Wort. Wenn sie auf ein Leerzeichen stößt, wird das Lesen der Zeichenfolge abgebrochen.

6voto

N 1.1 Punkte 12152
fscanf(file,"%50[^\n]\n",string);
  1. Jedes Zeichen außer \n wird verbraucht von [^\n]

  2. Maximal 50 Zeichen werden verbraucht (stellen Sie sicher, dass die Zeichenkette mindestens Platz für 51 Zeichen hat)

  3. ..\n",string Dies stellt sicher, dass \n wird ebenfalls verbraucht, damit der nächste Aufruf nicht einfach einen Null-String zurückgibt.

3voto

James McNellis Punkte 337231

fscanf con %s hört auf zu lesen, wenn es ein Leerzeichen findet.

Da Sie unformatierten Text lesen, können Sie einfach fgets die so lange liest, bis sie den Puffer füllt, den Sie ihr gegeben haben, findet sie einen Zeilenumbruch ( \n ) oder das Ende der Datei erreicht, je nachdem, was zuerst eintritt.

3voto

jamesdlin Punkte 63159

Vermeiden Sie die Verwendung von scanf . Wie bereits erwähnt, sollten Sie die fgets ではなく

Wenn Sie keinen Puffer mit fester Größe verwenden und Zeilen beliebiger Länge zulassen wollen, können Sie versuchen, mit Chuck Falconer's öffentlicher Bereich ggets fonction . (Dieser Link scheint im Moment nicht verfügbar zu sein, aber archive.org hat eine Kopie .)

2voto

Nathan S. Punkte 5169

Fscanf kann so modifiziert werden, dass es nach Leerzeichen liest. Die Details sind ein wenig kompliziert. Hier ist, was die Manpage über %[...] sagt.

Entspricht einer nicht leeren Folge von Zeichen aus der angegebenen Menge von akzeptierter Zeichen; der nächste Zeiger muss ein Zeiger auf char sein, und es muss genug Platz für alle Zeichen in der Zeichenkette, plus ein abschließendes NUL-Zeichen. Der übliche Überspringen eines führenden Leerzeichens ist unterdrückt. Die Zeichenkette muss bestehen aus Zeichen in (oder nicht in) einer bestimmten bestimmten Menge bestehen; die Menge ist definiert durch die Zeichen zwischen der offenen Klammer [ Zeichen und einem schließenden Klammerzeichen ] definiert. Die Menge schließt aus diese Zeichen aus, wenn das erste Zeichen nach der offenen Klammer ein Zirkumflex ^ ist. Um eine geschlossene Klammer in die Menge aufzunehmen, machen Sie sie zum ersten Zeichen nach der offenen Klammer oder dem Zirkumflex; jede andere Position beendet den Satz. Der Bindestrich ist ebenfalls ein Sonderzeichen; wenn zwischen zwei anderen Zeichen steht, fügt es alle dazwischen liegenden Zeichen zur der Menge hinzu. Um einen Bindestrich einzufügen, machen Sie ihn das letzte Zeichen vor der abschließenden schließenden Klammer. Zum Beispiel, `[^]0-9-]' bedeutet die Menge ``Alles außer geschlossene Klammern, Null bis neun und Bindestrich''. Die Zeichenkette endet mit dem Auftreten eines Zeichens, das nicht in der Menge (oder, mit einem Zirkumflex, in) oder wenn die Feldbreite erschöpft ist.

Also, %[^ \n ] sollte alles bis zum Wagenrücklauf lesen.

-1voto

ashoka vanjare Punkte 1

Anfänglich Daten mit Payload_ID senden 00 01 02 03 ....10

verwenden.

char *pChar="" ; //für die Erfassung von Zeichenketten.

fprintf(fp1, "%s", strtok(pChar, "Payload_ID"));

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X