| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1290 人关注过本帖
标题:向文件读取数据问题,请教前辈。
只看楼主 加入收藏
wj66
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2019-8-16
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:2 
向文件读取数据问题,请教前辈。
我最近自学c语言,用的是谭浩强老师的《C程序设计》。下面是卡住我半天的一个问题,恳请前辈解疑。
程序代码:
#include <stdio.h>
#define SIZE 10
struct student_type

 {char name[10];
  int num;
  int age;
  char addr[15];

 }stud[SIZE];                // 定义全局结构体数组stud,包含10个学生数据  

void save( )                 // 定义函数save,向文件输出SIZE个学生的数据  
  {FILE *fp;
   int i;
   if((fp=fopen ("stu.dat","wb"))==NULL)    // 打开输出文件atu_list  
      {printf("cannot open file\n");
       return;
      }
   for(i=0;i<SIZE;i++)
      if(fwrite (&stud[i],sizeof (struct student_type),1,fp)!=1)
         printf ("file write error\n");
   fclose(fp);
  }

int main()
  {int i;
   printf("Please enter data of students:\n");
   for(i=0;i<SIZE;i++)           // 输入SIZE个学生的数据,存放在数组stud中  
     scanf("%s%d%d%s",stud[i].name,&stud[i].num,&stud[i].age,stud[i].addr);
   save( );
   return 0;
  }

如上,当运行进入save函数时,第一个if语句是判别是否能够打开文件;第二个if语句是判断函数是否执行成功。我并没有看到fwrite函数有给文件写入数据的语句呀,怎么会把数据填入磁盘呢?     难道是第二个if语句中的的fwrite函数有两重作用,一个作用是当做执行语句,另一个是做为判断的条件?
如下面这个程序,我清楚地看到了fread函数读到了一组数据。
程序代码:
#include <stdio.h>
#include <stdlib.h>
#define SIZE 10
struct student_type
  {char name[10];
   int num;
   int age;
   char addr[15];
  }stud[SIZE]; 

int main( )
  {int i;
   FILE *fp;
   if((fp=fopen ("stu.dat","rb"))==NULL)        // 打开输入文件atu.dat  
      {printf("cannot open file\n");
       exit(0) ;
      }
   for(i=0;i<SIZE;i++)
     {fread (&stud[i],sizeof(struct student_type),1,fp);       // 从fp指向的文件读入一组数据  
      printf ("%-10s %4d %4d  %-15s\n",stud[i].name,stud[i].num,stud[i]. age,stud[i].addr);
            // 在屏幕上输出这组数据 
     }
   fclose (fp);                                  // 关闭文件"stu.dat" 
   return 0;
  }


抱歉,我刚开始学,基础很薄弱,可能描述的也不清楚。您要是看不懂,我再做解释。谢谢解答!
搜索更多相关主题的帖子: 文件 数据 SIZE int 函数 
2019-08-17 00:00
zbjzbj
Rank: 12Rank: 12Rank: 12
来 自:郑州
等 级:贵宾
威 望:52
帖 子:633
专家分:3045
注 册:2011-4-22
收藏
得分:20 
if(fwrite (&stud[i],sizeof (struct student_type),1,fp)!=1)

这里隐含了一个变量,比如 int x ,
假如 x = fwrite (&stud[i],sizeof (struct student_type),1,fp)

所述语句两步执行:
1,执行 x = fwrite (&stud[i],sizeof (struct student_type),1,fp);
2,判断 x = 1?

不得出x的值,怎么判断x=1?判断x的时候,显然fwrite已经执行过了(写过了
这是美国人的思维方法,灵活,简洁,和中国人中规中矩的思维方法和逻辑是有显著区别的

c语言包含很多这样的思维,学习c语言,必须接受并理解这种逻辑思维。




[此贴子已经被作者于2019-8-17 00:22编辑过]

2019-08-17 00:19
wj66
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2019-8-16
收藏
得分:0 
回复 2楼 zbjzbj
谢谢您!您解释的很清楚,看懂了。
我还有个很简单的问题,希望您择闲时解答一下,什么时候都可以。特别感谢!
2019-08-17 00:36
快速回复:向文件读取数据问题,请教前辈。
数据加载中...
 
   



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

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