C-从文件中读取
我有一个包含以下内容的文本文件: ANT. Small insect, sometimes has wings on its back. BEAR. Large beast. 但是,它只打印: BEAR. Large beast. 熊大野兽。 我想把它打印出来: ANT. Small insect, sometimes has wings on its back. BEAR. Large beast. 蚂蚁。小昆虫,有时背部有翅膀。 熊大野兽。C-从文件中读取,c,file,fgetc,C,File,Fgetc,我有一个包含以下内容的文本文件: ANT. Small insect, sometimes has wings on its back. BEAR. Large beast. 但是,它只打印: BEAR. Large beast. 熊大野兽。 我想把它打印出来: ANT. Small insect, sometimes has wings on its back. BEAR. Large beast. 蚂蚁。小昆虫,有时背部有翅膀。 熊大野兽。 /*所有内容都可以在您的代码中找到。我的
/*所有内容都可以在您的代码中找到。我的机器运转良好。我只添加了一个if条件,以打印与文件相同的内容*/
#包括
内部主(空)
{
文件*fp;
INTC;
fp=fopen(“rabi.txt”,“r”);
如果(fp==NULL)
{
perror(“打开文件时出错”);
返回(-1);
}做{
c=fgetc(fp);
if(feof(fp))
打破
printf(“%c”,c);
printf(“\n”);
}而(1),;
printf(“\n”);
fclose(fp);
}
o/p-->
rabi@rabi-虚拟箱:~/rabi/c$gcc 11.c
rabi@rabi-虚拟箱:~/rabi/c$/a.out
蚂蚁。小昆虫,
有时背上有翅膀。
熊大野兽。
在DOS/Windows计算机上创建的文本文件与在Unix/Linux上创建的文件具有不同的行尾。DOS使用回车符和换行符(“\r\n”)作为行尾,Unix只使用换行符(“\n”)。在Windows机器和Unix机器之间传输文件时需要小心,以确保正确翻译行尾
使用
fscanf()
使其变得简单,或者fgets()
如果文件内容如您所说,我怀疑这是您得到的唯一输出。循环应该打印文件中除换行符以外的所有字符,因此所有内容都应该在一行上。此外,像您这样的循环的标准方法更像while((c=fgetc(fp))!=EOF){printf(“%c”,c);}
输出应该是正确的……您应该再次检查您的输出,或者输入文件在我的编译器上工作正常,除非没有换行符,但其他一切都如预期的那样。可以省略前面的if语句,而不是编写另一个if语句
ANT. Small insect, sometimes has wings on its back.
BEAR. Large beast.
/*Everything looks find in your code. in my machine it is working fine . I have only added a if condition to print the contents same as the file thats it .. */
#include<stdio.h>
int main(void)
{
FILE *fp;
int c;
fp = fopen("rabi.txt","r");
if(fp == NULL)
{
perror("Error in opening file");
return(-1);
} do {
c = fgetc(fp);
if(feof(fp))
break ;
printf("%c", c);
printf ("\n");
}while(1);
printf ("\n");
fclose(fp);
}
o/p-->
rabi@rabi-VirtualBox:~/rabi/c$ gcc 11.c
rabi@rabi-VirtualBox:~/rabi/c$ ./a.out
ANT. Small insect,
sometimes has wings on its back.
BEAR. Large beast.