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;
}
我有一个程序(控制台),我将所有文本放在一个单独的 .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;
}