C程序在逐行读取文本文件时添加空格



我有一个程序可以打开一个文本文件并逐行读取。它还将每行放入一个数组中。当我使用此函数并尝试使用 printf 语句中的每一行时,会添加新行字符。

我的代码:

    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]);

其输出如下:

Name: Tree Bacon
 is now 30.21

printf 正在添加新行字符,我似乎无法发现为什么会发生这种情况。

从我的文本文件中读取的两行是:

Tree Bacon
30.21

我最喜欢的删除fgets读取的尾随newline的方法是使用strcspn

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

当然,您必须推迟递增数组索引。

由于 fgets 还存储尾随换行符,因此您可以使用 strchr 将其删除:

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

最新更新