C语言多文件编程基本格式

1、背景:

用一个丢骰子的简单案例熟悉了C语言多文件编程该咋写

2、格式

(1)主函数文件main.c

//文件头part1:所有要使用的函数
#include <stdio.h>;
#include <stdlib.h>;
#include <time.h>;
//文件头part2:放所有函数原型的文件
#inlucde "main.h"
//文件头part3:各个要使用的子文件
#include "funciton1.c"
#inlucde "function2.c"

int main(){
  function1();   //在function1.c
  function2();   //在function2.c
  return 0;
}

(2)乘放所有函数原型、全局变量的文件main.h

void function1(void);
void function2(void);
/*
这里有2个知识点或者说优秀编程规范
1、对全局数据使用const,防止暴露数据
2、头文件方案可以偷懒而不使用“一个文件中定义式声明,其他文件使用extern引用式声明”对方案,但是必须加static。不然file1.c和file2.c都包含main.h,那么这2个文件就都有一个相同的定义式声明,大多数编译器不允许这么做
*/
static const int a = 10;
static const double b = 20'

(3) 放各个函数的子文件(示例:function1.c)

void function1(void){
        具体函数逻辑
}

3、案例:丢骰子

(1)主函数

#include <stdio.h>
#include <stdlib.h>
#include "main.h"
#include "random.c"
#include "roll.c"

/*
1、要求用户输入骰子数、骰子的面数;输出掷出的结果;
2、随机数的生成种子基于time()生成真随机数
3、支持循环输入
4、能处理以下错误情况:
(1)side小于1
(2)输入类型不匹配
(3)遇到EOF
*/

/*伪算法:
int main(){
    输入函数:骰子数(报错处理)、面数(报错处理)
    循环(当不报错的时候){
        丢骰子函数(骰子数、骰子的面数);
        输入函数;
    }
}

丢骰子函数(骰子数、骰子的面数){
    while(<骰子数){
        随机数函数(骰子的面数)
    }
    数组存储(所有随机数结果);
    对数组求和;
    输出结果(骰子数、骰子的面数、数组求和结果)
}

随机数函数(骰子的面数){
    种子 = (时间函数返回的某个数)
    输出结果 = 种子  % 骰子的面数
}
*/


int main(){
    int rolls,sides,result;
    //输入函数部分
    printf("please input the num of rolls you wanna use:");
    if(scanf("%d",&rolls) !=  1){
        printf("you should have input one num.\n");
    };
    if(rolls < 1){
        printf("you should use 1 roll at least\n");
    }

    printf("How many sides a roll have?  ");
    if(scanf("%d",&sides) !=  1){
        printf("you should have input one num.\n");
    };
    if(sides < 1){
        printf("you should use 1 sides at least\n");
    }

    while(rolls >= 1 && sides >= 1){
        printf("you use %d rolls with %d sides, and your result is %d\n",rolls,sides,roll(rolls,sides));

        printf("Another??? please input the num of rolls you wanna use:");
        if(scanf("%d",&rolls) !=  1){
            printf("you should have input one num.\n");
        };
        if(rolls < 1){
            printf("you should use 1 roll at least\n");
        }

        printf("How many sides a roll have?  ");
        if(scanf("%d",&sides) !=  1){
            printf("you should have input one num.\n");
        };
        if(sides < 1){
            printf("you should use 1 sides at least\n");
        }       
    }
    
    
    //-test输入函数
    return 0;
}

(2)main.h

//这里存放丢骰子函数的函数声明
//丢骰子函数
int roll(int rolls,int sides);
//随机数函数
int my_random(int sides);

(3)丢骰子函数

int roll(int rolls,int sides){
    int result = 0;
    int list[rolls];
    for(int i = 0; i < rolls;i++){
        list[i] = my_random(sides);
    }
    for(int i = 0 ;i < rolls;i++){
        result += list[i];
    }
    return result;
}

/*
丢骰子函数(骰子数、骰子的面数){
    while(<骰子数){
        随机数函数(骰子的面数)
    }
    数组存储(所有随机数结果);
    对数组求和;
    输出结果(骰子数、骰子的面数、数组求和结果)
}
*/

(4)随机数函数

/*
随机数函数(骰子的面数){
    种子 = (时间函数返回的某个数)
    输出结果 = 种子  % 骰子的面数
}
*/
int my_random(int sides){
    int seed = (unsigned int)time(0);
    seed = seed % sides + 1;
    return seed;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,050评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,538评论 1 306
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,673评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,622评论 0 218
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,047评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,974评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,129评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,893评论 0 209
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,654评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,828评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,297评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,619评论 3 262
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,326评论 3 243
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,176评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,975评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,118评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,909评论 2 278

推荐阅读更多精彩内容