老陆lll
2021-01-17 17:15
采纳率: 100%
浏览 16

关于fopen函数的基础例题。程序运行正常,为什么文件里却没有数据?

照着书上调用fopen函数的例题打的代码,但运行后文件中并没有数据

#include<stdio.h>
#include<stdlib.h>
int main()
{
	FILE *fp;
	char ch,filename[10];
	printf("请输入所用的文件名:");
	scanf("%s",filename);
	getchar();
	if(fopen(filename,"w")==NULL)
	{
		printf("cannot open file\n"); 
		exit(0);
	} 
	fp = fopen(filename,"w");
	printf("%d\n",*fp);
	printf("请输入一个准备存储到磁盘的字符串(以#结束):");
	ch = getchar();
	while(ch!='#')
	{
		fputc(ch,fp);
		putchar(ch);
		ch = getchar();	
	} 
	fclose(fp);
	putchar(10);
	return 0;
}

 

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • 樱满无门 2021-01-17 19:22
    已采纳

    望采纳

    点赞 打赏 评论
  • 「已注销」 2021-01-17 17:24

    关了重新打开才能看见

    点赞 打赏 评论
  • 老陆lll 2021-01-17 17:32

    图中的txt文件已经是重新打开了的。

    点赞 打赏 评论
  • 「已注销」 2021-01-17 17:37

    我电脑上是可以的,vscode

    点赞 打赏 评论
  • 「已注销」 2021-01-17 17:39

    点赞 打赏 评论
  • 老陆lll 2021-01-17 18:29

    好的,谢谢

    点赞 打赏 评论
  • 樱满无门 2021-01-17 19:17

    这里有问题

    if(fopen(filename,"w")==NULL)
    {
    	printf("cannot open file\n"); 
    	exit(0);
    } 
    fp = fopen(filename,"w");

    已经使用了fopen打开了这个文件而没有对文件指针进行保存,相当于第一次打开的文件指针丢失了,而操作系统这个时候已经认为这个文件处于打开状态,但是接下来你又调用了fopen函数,相当于打开已经打开了的文件。

    正确的写法应当是

    if ((fp = fopen(filename, "w+")) != NULL)
    {
        printf("cannot open file\n");
        exit(-1);
    }

    其次,fp是文件指针,文件指针并不是文件描述符,FILE类型是一个结构体,因此如下的写法也是错误的:

    printf("%d\n",*fp);

    它是没有意义的

    点赞 打赏 评论
  • 樱满无门 2021-01-17 19:21

    点赞 打赏 评论

相关推荐 更多相似问题