鱼C论坛

 找回密码
 立即注册
查看: 5684|回复: 13

一个函数各种结构的程序怎么分函数分文件写?

[复制链接]
发表于 2011-10-4 17:41:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Y.H 于 2011-10-4 17:42 编辑

如题:
有一个程序 包含了 main函数   save函数。        在main函数中声明定义了一个结构变量。

而 save函数则不和main函数在同一个文件中。

如main函数所在的文件代码:
main:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define LEN 4

  4. struct student                  //学生数据.
  5. {
  6.         char name[10];
  7.         int num;
  8.         int age;
  9.         char addr[15];
  10. }stud[LEN];

  11. void save ();                   //把结构中的数据以二进制文件格式写入文件.

  12. void main()
  13. {
  14.         int i;
  15.         printf ("input name num age addr : \n\n");
  16.         for (i = 0; i < LEN; i++)
  17.         {
  18.                
  19.                 scanf ("%s%d%d%s", stud[i].name, &stud[i].num, &stud[i].age, stud[i].addr);

  20.                
  21.         }                       //输入4个学生的各个数据.

  22.         save();                 //调用save函数把数据写入二进制文件.

  23.         system("pause");
  24. }
复制代码


save函数:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define LEN 4
  4. void save()                     //把结构中的数据以二进制文件格式写入文件.
  5. {
  6.         FILE *fp;              //声明一个文件结构指针.
  7.         int i;
  8.         if (!(fp = fopen("student-list", "wb")))        //读写建立一个二进制文件,使fp链接这个文件.
  9.         {
  10.                 fprintf (stderr, "error\n\n");
  11.                 return;
  12.         }
  13.         for (i = 0; i < LEN; i++)
  14.         {
  15.                 if (1 !=  fwrite(&stud[i], sizeof(struct student), 1, fp))      //以数据块的方式写入数据.
  16.                 {
  17.                         fprintf (stderr, "error\n\n");
  18.                         return;
  19.                 }               //循环写入main函数中的结构变量中的数据
  20.         }
  21. }
复制代码



主要的问题就是怎么样把这个程序分两个文件写,并正常运行。

我这里的关键问题就是怎么在save函数中引用stud结构变量.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-4 21:50:55 | 显示全部楼层
本帖最后由 crazylinux 于 2011-10-4 22:46 编辑

void save()                     //把结构中的数据以二进制文件格式写入文件.
{
        FILE *fp;              //声明一个文件结构指针.
        int i;
        if (!(fp = fopen("student-list", "wb")))        //读写建立一个二进制文件,使fp链接这个文件.
        {
                fprintf (stderr, "error\n\n");
                return;
        }
        for (i = 0; i < LEN; i++)
        {
                if (1 !=  fwrite(&stud, sizeof(struct student), 1, fp))      //以数据块的方式写入数据.
                {
                        fprintf (stderr, "error\n\n");
                        return;
                }               //循环写入main函数中的结构变量中的数据
        }
}

save()大体意思是什么?
终于看的差不多了,调用save()你分开写,你的save()要带参数不能是空的。用数学的意思讲就是你的save()是公式在mian()中调用对么?可以这样理解么?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-4 22:03:10 | 显示全部楼层
类?C++?喔 ,,,, 看样子只学点C还是不够啊!  还是要学习C++里的类?????

那C++的类是不是也算是和C的一个区别?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-4 22:19:18 | 显示全部楼层
本帖最后由 crazylinux 于 2011-10-4 22:30 编辑


你写的我看的有点晕呼呼的,留言我改了好几次了,你会写头文件么?头文件和类的一次差不多,说的简单点,没有stdio.h你能运行printf()和scanf()么?这样你明白了吧?你把你的save()函数变成公式包装在.h头文件里。在主函数里引入。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-4 22:46:01 | 显示全部楼层
本帖最后由 Y.H 于 2011-10-4 22:47 编辑
crazylinux 发表于 2011-10-4 22:19
你写的我看的有点晕呼呼的,留言我改了好几次了,你会写头文件么?头文件和类的一次差不多,说的简单点 ...

说真的我只会引用这个stdio.h  这个头文件。

具体怎么写头文件也不懂!从来没写过。。

要不你就拿我这个程序写个例子好不???。。。感谢了哈。。。分享给大家(所有不会写的童鞋)

注意:这个程序,总共是有mian主函数,和save函数两个。。而mian主函数中还声明了一个结构体变量。

而我就是想把他们分开写,每一个单独写在一个文件中。所以我才发帖提问的。

而最初的疑问就是说:当分为两个单独的文件时:在save函数中怎么引用到在main主函数中的那个结构体变量。。。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-4 22:49:08 | 显示全部楼层
本帖最后由 crazylinux 于 2011-10-4 22:50 编辑
Y.H 发表于 2011-10-4 22:46
说真的我只会引用这个stdio.h  这个头文件。

具体怎么写头文件也不懂!从来没写过。。


你让我写最起码让我知道你save函数主要是做什么的吧?我有一个“员工管理系统”就是份文件写的
你可以看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-4 22:54:33 | 显示全部楼层
crazylinux 发表于 2011-10-4 22:49
你让我写最起码让我知道你save函数主要是做什么的吧?

哦 对了,,,,,其实就是我在学习甲鱼的零基础C视频 中 文件操作

就是把main主函数中的结构体数组stud[LEN]  LEN = 4    中的数据写到一个二进制文件中(文件名:student-list  (没有后缀名的)因为是二进制的写入方式)。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-4 23:08:07 | 显示全部楼层
我这里没有C语言,我现在在学习单片机C语言呢我告诉你大概你试试。
void是纯写入文件的对吧?
03.#define LEN 4

04.void save()                     //把结构中的数据以二进制文件格式写入文件.

05.{

06.        FILE *fp;              //声明一个文件结构指针.

07.        int i;

08.        if (!(fp = fopen("student-list", "wb")))        //读写建立一个二进制文件,使fp链接这个文件.

09.        {

10.                fprintf (stderr, "error\n\n");

11.                return;

12.        }

13.        for (i = 0; i < LEN; i++)

14.        {

15.                if (1 !=  fwrite(&stud[i], sizeof(struct student), 1, fp))      //以数据块的方式写入数据.

16.                {

17.                        fprintf (stderr, "error\n\n");

18.                        return;

19.                }               //循环写入main函数中的结构变量中的数据

20.        }

21.}
把这一段以read.h为文件名存起来,h为扩展名。在mian()函数的上面用#include引入这个头文件,在下面就是在mian()中调用你试试。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-4 23:39:49 | 显示全部楼层
crazylinux 发表于 2011-10-4 23:08
我这里没有C语言,我现在在学习单片机C语言呢我告诉你大概你试试。
void是纯写入文件的对吧?
03.#define ...

耶丝,,,,,可以了
不过要把  那个结构也写到read.h中去,,

不然就是单独写一个结构.h头文件

那就还要包含结构.h头文件   而且也要在read.h中包含这个结构.h头文件


谢谢。谢谢你孜孜不倦的教导!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-4 23:41:43 | 显示全部楼层
Y.H 发表于 2011-10-4 23:39
耶丝,,,,,可以了
不过要把  那个结构也写到read.h中去,,

客气了,发出来其他人也可学学,我刚刚发了一个C语言连接mysql数据库你可以试试看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-4 23:50:43 | 显示全部楼层
本帖最后由 Y.H 于 2011-10-5 00:10 编辑
crazylinux 发表于 2011-10-4 23:41
客气了,发出来其他人也可学学,我刚刚发了一个C语言连接mysql数据库你可以试试看

嗯好的。。。。

那我就把过程写下

第一:在同一工程中新建一个C/C++头文件以   “文件名.h”  格式新建。新建后会在File View视图的Header File 中出现新建的文件。
  然后把要写的代码写进去。就如我这个程序可以把结构和save函数写在一个文件中。
如图:

                               
登录/注册后可看大图


当然啦,在main主函数用引用这个文件就如引用stdio.h一样  #include  "文件名.h"   双引号代表是自己写的头文件.引用图片:

                               
登录/注册后可看大图


也可以用同样的方法把那个结构写到一个头文件中。只是要在用引用他的地方  添加#include "文件名.h"

呵呵 文笔不咋样。写的不清楚的 还望包含。。。。望高手,多锤锤,锤锤就剩精华了!




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-4 23:53:20 | 显示全部楼层
我要求加精!~我大力要求加精!~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-5 01:39:40 | 显示全部楼层
本帖最后由 yipwing 于 2011-10-5 01:40 编辑
Y.H 发表于 2011-10-4 22:03
类?C++?喔 ,,,, 看样子只学点C还是不够啊!  还是要学习C++里的类?????

那C++的类是不是也算 ...

C++就是C的扩展版,多了些概念,面向对象之类的。。
类的话和结构体差不多。。只是多了访问权限而已

把C学好,C++就一点都不难。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-5 02:13:54 | 显示全部楼层
本帖最后由 Y.H 于 2011-10-5 02:14 编辑
yipwing 发表于 2011-10-5 01:39
C++就是C的扩展版,多了些概念,面向对象之类的。。
类的话和结构体差不多。。只是多了访问权限而已

天啊,,终于退了一步又一步退到现在的地步,终于可以了。。。。

有三个文件,分别是主函数main、save函数(把结构变量中的数据写入文件)、load函数(把文件中的数据读入结构变量中)并输出。。。。

注意这里的save,load函数中的结构变量完全没有关联,因为现在还没想到怎么引用同一个结构。(今天思路不通,想使用传递参数的方法也总做不出来)

所以就在每个函数里单独声明定义了另外的结构。。。。不过结构内的组成元素还是一样的。

源代码: 超级实验自己写头文件.rar (206.63 KB, 下载次数: 0)

高手多多锤锤。


今天感觉自己笨了好多。。。。。。。最后做的还是和以前一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 17:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表