2010-05-09 8 views

Antwort

13

fgets erhalten eine Zeile und setzen den Dateizeiger ab der nächsten Zeile. Dann können Sie anfangen zu lesen, was Sie nach dieser ersten Zeile wünschen.

char buffer[100]; 
fgets(buffer, 100, pointer); 

Es funktioniert, solange Ihre erste Zeile weniger als 100 Zeichen lang ist. Andernfalls müssen Sie überprüfen und Schleife.

+0

Danke das funktioniert perfekt !! – NLed

+0

Danke, ich habe eine Frage erstellt, dann löschte es und finde meine Antwort hier :) – Bionix1441

12

Es ist nicht klar, was Sie versuchen, Ihre Daten zu speichern, in so ist es nicht einfach, eine Antwort, die übrigens zu erraten Sie nur Bytes überspringen, bis Sie über einen \n gehen:

FILE *in = fopen("file.txt","rb"); 

Dann können Sie entweder überspringen eine ganze Zeile mit fgets aber es ist unsicher (weil Sie die Länge der Linie a priori schätzen müssen), ansonsten verwenden fgetc:

uchar8 c; 
do 
    c = fgetc(in); 
while (c != '\n') 

Schließlich sollten Sie Formatbezeichner in Ihremhabenum tatsächlich Daten zu analysieren, wie

fscanf(in, "%f", floatVariable); 

Sie here für Planer beziehen.

+0

Danke für die Antwort, versuchte ich mit '" rb "', aber das hat nicht funktioniert :( Vielen Dank für den Link zu Spezifizierer, im check sie jetzt – NLed

+3

Es sollte nicht "rb" sondern nur "r" sein. – Casey

+0

http://www.cplusplus.com/reference/clibrary/cstdio/fopen/ – Casey

2

fgets würde hier funktionieren.

#define MAX_LINE_LENGTH 80 

char buf[MAX_LINE_LENGTH]; 

/* skip the first line (pFile is the pointer to your file handle): */ 
fgets(buf, MAX_LINE_LENGTH, pFile); 

/* now you can read the rest of your formatted lines */ 
24

konnte ich Zeilen mit dem folgenden Befehl mit Scanf auszulassen:

fscanf(config_file, "%*[^\n]\n", NULL); 

die Format-Zeichenkette repräsentieren eine Zeile jedes Zeichen einschließlich Leerzeichen enthält. Das * in der Formatzeichenfolge und der NULL-Zeiger bedeuten, dass wir nicht daran interessiert sind, die Zeile zu speichern, sondern nur die Dateiposition zu erhöhen.

Format String Erläuterung:
% ist das Zeichen, die jeweils Scanf Format-Zeichenkette mit beginnt;
* zeigt an, dass das gefundene Muster nirgendwo eingefügt wird (normalerweise speichert man das gefundene Muster in Parametern nach der Formatzeichenfolge, in diesem Fall ist der Parameter NULL);
[^\n] bedeutet jedes Zeichen außer Newline;
\n bedeutet Newline;

so die [^\n]\n bedeutet eine vollständige Textzeile, die mit Newline endet.

Referenz here.

+1

Dies ist die minimalste Lösung und es funktioniert gut, danke! –

+0

Das ist großartig, aber ich verstehe das wirklich nicht. Wenn Sie mehr erklären können, wird es mehr Leuten wie mir helfen. Ich sehe nie das "% * [^ \ n] \ n" 'vorher. – buzhidao

+0

@buzhidao das' * 'instruiert' fscanf' (tatsächlich alle 'scanf' - Familie), um die Daten wie in der Formatzeichenkette dargestellt zu analysieren, aber nicht, um sie unter einer Zieladresse zu speichern (was gut ist, weil es keine gibt eine Argumentliste). Das '[^ \ n]' bedeutet tak Alles außer einem Zeilenumbruch, so dass ALLE Daten bis zum Zeilenumbruch (aber nicht inklusive) verbraucht werden. Schließlich bedeutet das abschließende '\ n" "und" konsumiere (und ignoriere) den Zeilenumbruch "(auf den wir bei der Erfüllung der vorherigen Formatspezifikation gerade gewartet haben). Btw, der NULL wird in der Argumentliste nicht benötigt. – WhozCraig

Verwandte Themen