如何用c语言实现文件先写入部分数据,然后再读取输出在屏幕上

#include<stdio.h>intmain(){FILE*fp;charread[1000];chars;longp;if((fp=fopen("1s.txt","... #include<stdio.h>
int main()
{
FILE *fp;
char read[1000];
char s;
long p;

if((fp=fopen("1s.txt","a"))==NULL)
{
printf("\nOpen file error!press any key exit!");
getchar();
exit(0);
}

p=123456;
s='\n';

fputc(p,fp);
fputc(s,fp);
fputc(p,fp);

fgets(read,1000,fp);
printf("%s",read);

system("pause");
return 0;
}

这个输出没结果,直接就是"按任意键退出“
展开
 我来答
kaixingui2012
2015-09-25 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6487万
展开全部
  • 文件先写入部分数据,然后再读取输出在屏幕上,所以,在打开文件时必须以可读写方式"+"打开文件。(r+ w+ a+均可)

  • 写完后,再读。因此,要把文件指针前移才可以,否则当前位置处在已写完的数据位置,无法读到数据。
    参考代码:

#include<stdio.h>
int main()
{
   FILE *fp;
   char read[1000];
   char *p="hello";
   char s='\n';

   if((fp=fopen("data.txt","a+"))==NULL) //追加方式,可读可写
   {
       printf("\nOpen file error!press any key exit!");
       return -1;
   }

   fputs(p,fp); //写一个串hello
   fputc(s,fp); //写一个回车符
   fputs(p,fp); //再写一个串hello

   fseek(fp, -5, SEEK_CUR ); //从当前位置,向前移动5个字节文件指针
   fgets(read,1000,fp); //读取数据
   printf("%s",read); //得到hello
   
   fclose(fp);
   return 0;
}
金色潜鸟
2013-03-09 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5738万
展开全部
fopen() 改为: if((fp=fopen("1s.txt","w+"))==NULL)
fputc(p,fp); 改为:fprintf(fp,"%d",p);
读语句前,加一句文件回绕到文件头: rewind(fp);
----------------
int main(){
FILE *fp;
char read[1000];
char s;
long p;
if((fp=fopen("1s.txt","w+"))==NULL)
{
printf("\nOpen file error!press any key exit!");
getchar();
exit(0); }
p=123456;
s='\n';
fprintf(fp,"%d",p);
fputc(s,fp);
fprintf(fp,"%d",p);
rewind(fp);
fgets(read,1000,fp);
printf("%s",read);
system("pause");
return 0;}
更多追问追答
追问
这个运行结果是123456\n而不是
123456\n
123456啊?是什么原因呢
追答
因为 fgets 只读1行,含 \n.

写数据时,两个 123456 之间,fputc(s,fp); 写了一个 \n, 这个 \n 不只是 一个字符,而且是功能键,使文件里文字换了行。文件成为2行:
123456
123456
----------------------
而不是
123456 无功能字符 123456
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cdyzxy
2013-03-09 · TA获得超过2.1万个赞
知道大有可为答主
回答量:1.4万
采纳率:85%
帮助的人:3771万
展开全部
在你fputc之后文件的当前指针停留在文件末尾,这样你fgets什么都不会读到。
建议将文件指针设置返回文件头,即在fgets语句前面加:fseek(fp,0L,SEEK_SET);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式