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

时间:2016-12-21 14:38:13

标签: c newline string-formatting fgets

我有一个程序(控制台),我将所有文本放在一个单独的.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。我也在文件中尝试了addint \或\ t,但它会打印\和\ t而不是制表或单个反斜杠

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

编译器正在扫描文本文件并将数据/文本存储在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] = '\0';
    fclose(fic);

    for(i = 0; str[i] != '\0'; 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;
}