| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2646 人关注过本帖
标题:为什么用fprintf后文件还是空的
只看楼主 加入收藏
星行星际
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2016-1-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
为什么用fprintf后文件还是空的
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <stdlib.h>
#include <string.h>

struct student
{
    char num[10];//学号
    char sex[6];//性别
    char name[10];//姓名
    char phone[10];//电话号码
    char qqnum[10];//QQ号码
    char wechat[20];//微信号码
    char home[20];//住址
    struct student *next;
};

struct student *in(struct student *head)//建立链表,将文件中的初始数据导出到链表中存储
{

   struct student*p,*tail;
   FILE *fp;
   int i,n=0,m;
   p=(struct student *)malloc(sizeof(struct student));
     if(!p)
     exit(0);
      p=head;
    fp=fopen("data.txt","r");
    if(fp==NULL)
    exit(0);
    while(n<10)
    {
    p=(struct student *)malloc(sizeof(struct student));
    fscanf(fp,"%s%s%s%s%s%s%s",p->num,p->name,p->sex,p->phone,p->qqnum,p->wechat,p->home);
    n++;
    p->next=NULL;
    if(head==NULL)
        head=p;
    else
        tail->next=p;
    tail=p;
    }
    //show(head);
    return head;
    fclose(fp);
}

void show(struct student *head)//显示全部通讯录
{
    struct student *p=NULL;
    p=head;
    printf("-----------------------------------------------------------------\n");
    printf("学号    姓名      性别    电话号码   QQ号码    微信号码   家庭住址\n");
    while(p!=NULL)
    {
        printf("%s%10s%10s%10s%10s%10s%10s\n",p->num,p->name,p->sex,p->phone,p->qqnum,p->wechat,p->home);
        p=p->next;
    }
    printf("------------------------------------------------------------------\n");
    printf("输入0退出系统,输入1返回主菜单:");
      int n;
      scanf("%d",&n);
      switch(n)
      {
          case 0:exit(0);break;
        //  case 1:menu();break;
      }
}

int main()
{

     FILE *fp;
     struct student *p,*head;
     head=in(head);
     p=(struct student *)malloc(sizeof(struct student));
     p=head;
     if(fp=fopen("data-1.txt","a+")==NULL)
        exit(0);
     while(p!=NULL)
     {
     fprintf(fp,"%s%10s%10s%10s%10s%10s%12s\n",p->num,p->name,p->sex,p->phone,p->qqnum,p->wechat,p->home);
     p=p->next;
     }
     fclose(fp);
}
in与show函数没有错误,就是用fprintf后文件还是空,若是用printf输出到屏幕,数据是正确的,将open中的w改成a+也不行
搜索更多相关主题的帖子: include 电话 姓名 
2016-04-09 12:11
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:7 
使用文件的方式共有12种,下面给出了它们的符号和意义。
文件使用方式
意义编辑
"r" = "rt"
打开一个文本文件,文件必须存在,只允许读
"r+" = "rt+"
打开一个文本文件,文件必须存在,允许读写
"rb"
打开一个二进制文件,文件必须存在,只允许读
“rb+”
打开一个二进制文件,文件必须存在,允许读写
"w" = “wt”
新建一个文本文件,已存在的文件将被删除,只允许写
"w+" = "wt+"
新建一个文本文件,已存在的文件将被删除,允许读写
“wb”
新建一个二进制文件,已存在的文件将被删除,只允许写
“wb+”
新建一个二进制文件,已存在的文件将被删除,允许读写
"a" = "at"
打开或新建一个文本文件,只允许在文件末尾追写
"a+" = "at+"
打开或新建一个文本文件,可以读,但只允许在文件末尾追写
“ab”
打开或新建一个二进制文件,只允许在文件末尾追写
“ab+”
打开或新建一个二进制文件,可以读,但只允许在文件末尾追写
2016-04-09 12:30
zhulei1978
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
收藏
得分:7 
你那个是字符串,用fprintf不行的吧,试试fputs()函数

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2016-04-09 12:35
星行星际
Rank: 1
等 级:新手上路
帖 子:12
专家分:0
注 册:2016-1-6
收藏
得分:0 
解决了,是因为if(fp=fopen("data-1.txt","a+")==NULL),
应该写成
fp=fopen("data-1.txt","a+")
if(fp==NULL)
这样分开写,不然系统会出错
2016-04-09 12:48
lin5161678
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:45
帖 子:1136
专家分:3729
注 册:2011-12-3
收藏
得分:0 
回复 4楼 星行星际
只是弄错优先级 并不是系统出错

赋值运算符优先级低于比较运算符
所以
fp = fopen != NULL
被编译器理解为
fp = (fopen != NULL)
所以 你的 fp 的值错了

可以这样改
(fp = fopen) != NULL
这样就没什么问题了
当然 你现在的改法 把fp = fopen 提取出去
是最好的
没必要把他们写在一起
没有特别的好处 有一定的弊端

https://zh.
2016-04-11 10:35
快速回复:为什么用fprintf后文件还是空的
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020986 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved