2017-01-26 1 views
0

Ich habe ein Programm, das eine Textdatei öffnen und Zeile für Zeile lesen wird. Es fügt auch jede Zeile in ein Array ein. Wenn ich diese Funktion verwende und versuche, jede Zeile in einer printf-Anweisung zu verwenden, werden neue Zeilenzeichen hinzugefügt.C Programm Leerzeichen beim Lesen Textdateien Zeile für Zeile

Mein Code:

char fileContents[MAX_LINES][MAX_LINE_LENGTH]; 
    int lineCount = 0; 

    FILE *ifp = fopen("Tree-B.txt", "r"); 
    if (ifp == NULL) 
    { 
     printf("Error opening file!\n"); 
     exit(1); 
    } 

    while (fgets(fileContents[lineCount++], MAX_LINE_LENGTH, ifp) != NULL); 
    fclose(ifp); 

    printf("Name: %s is now %s", fileContents[0], fileContents[1]); 

Der Ausgang dieses sich wie folgt:

Name: Tree Bacon 
is now 30.21 

Die printf neue Zeile Zeichen ist das Hinzufügen und ich kann nicht zu entdecken scheinen, warum dies geschieht.

Die beiden Linien, die aus meiner Textdatei gelesen wurden, waren:

Tree Bacon 
30.21 
+1

'printf' fügt nichts hinzu. Die Zeilenumbrüche befinden sich in Ihrer Originaldatei. – melpomene

+1

'fgets' behält die' newline' von der Eingabe bei. –

+0

'printf' fügt nichts hinzu, der Newline ist in Ihren Daten. 'fgets()' enthält den Zeilenumbruch beim Einlesen von Zeilen. –

Antwort

0

Da fgets auch das Newline speichert, können Sie es entfernen mit strchr:

char *ptr; 

while (fgets(fileContents[lineCount], MAX_LINE_LENGTH, ifp) != NULL) { 
    ptr = strchr(fileContents[lineCount], '\n'); 
    if (ptr != NULL) { 
     *ptr = '\0'; 
    } 
    linecount++; 
} 
0

Meine Lieblings Art und Weise zu entfernen dass das nachfolgende newline gelesen von fgets ist mit strcspn

while (fgets(fileContents[lineCount], MAX_LINE_LENGTH, ifp) != NULL) { 
    fileContents[lineCount] [ strcspn(fileContents[lineCount], "\r\n") ] = 0; 
    linecount++; 
} 

Natürlich müssen Sie den Array-Index inkrementieren.