C: 如何让 fgets 从文件中读取一个 \n 换行符?

C: How to make fgets read a \n line break from a file?

我有一个程序(控制台),我将所有文本放在一个单独的 .txt 文件中。

我使用 fgets() 从文件中读取一个字符串,但是当文件包含一个 \n 并且我稍后打印该字符串时,它打印 \n 而不是换行符

这是一个例子:

FILE* fic = NULL;
char str[22]; //str is the string we will use

//open the file
fic = fopen ("text.txt", "r");

//read from the file
fgets(str, size, fic);

printf(str);

如果这是我的 text.txt:

This is \n an example

但是控制台上显示的是

This is \n an example

而不是

This is 
 an example

编辑: 在文件中它被写为\n。我还尝试在文件中添加 \ 或 \t,但它会打印 \ 和 \t 而不是制表或单个反斜杠

这是因为 编译器 在解析您的代码时会处理字符串和字符文字中的转义字符。它不是库中存在的东西,也不是所有字符串的 运行 时间代码。

如果您想翻译,例如两个字符\n,你从一个文件中读取,那么你需要在你的代码中自己处理它。例如,逐个字符地遍历字符串并查找 '\' 后跟 'n'.

fgets 只将 \ 和 n 视为普通字符。 你必须自己将它翻译成换行符。也许在 strstr() 或类似的帮助下。

编译器正在扫描文本文件并将 data/text 按原样存储在 str 字符串中。编译器不会将 \n 作为转义序列。因此,如果您想在出现 \n 时转到下一行,那么您应该逐个字符扫描,如果出现 \n,您应该 printf("\n")

#include <stdio.h>

int main(){
    char str[30];
    int i = 0;
    FILE *fic = NULL;
    fic = fopen("text.txt", "r");
    while(!feof(fic)){
        str[i++] = getc(fic);
        if(i > 30){    //Exit the loop to avoid writing outside of the string
            break;
        }
    }
    str[i - 1] = '[=10=]';
    fclose(fic);

    for(i = 0; str[i] != '[=10=]'; i++){
        if(str[i] == 'n' && str[i - 1] == '\'){
            printf("\n");
            continue;
        }
        if(str[i] == '\' && str[i + 1] == 'n'){
            printf("\n");
            continue;
        }
        printf("%c",str[i]);
    }
    return 0;
}