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

2023-05-16

1、背景:

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

2、格式

(1)主函数文件main.c

//文件头part1:所有要使用的函数#include ;#include ;#include ;//文件头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 #include #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 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;}
nk:href="#ic-like">

来源:https://www.jianshu.com/p/4ce2ed1a0764

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C语言多文件编程基本格式 的相关文章

  • CentOS安装远程桌面(XRDP)

    背景 现在大部分服务端应用都是运行在Linux上的 xff0c 所以使用Linux操作系统来开发应用会方便很多 用Mac的用户请自动跳过 准环境 主机 一台 操作系统 CentOS 7 6 安装步骤 安装软件并启动 yum groupins
  • 自定义prometheus-operator中容器的参数

    简介 prometheus opertator 方便了我们在Kubernetes里面部署prometheus集群 xff0c 但是有一些底层的配置也被掩盖了 我遇到的问题就是配置文件的实时生效 xff0c 要等3分钟才可以 于是去翻了一下C
  • Gitlab全量迁移

    背景 公司研发使用的Gitlab由于服务器下架需要迁移到新的Gitlab服务器上 Gitlab官方推荐了先备份然后再恢复的方法 个人觉得这个方案不是很友好 xff0c 故采用官方的另外一种方法 xff0c 百度后发现这个方法还没有人记录 x
  • Swift使用极光推送JPush的Demo

    JPushDemo github项目地址 需要导入JPush框架 xff0c 可以使用cocoapod导入 xff0c 也可以手动导入 环境配置 配置环境可以参考极光推送的官方文档 xff1a iOS 证书设置指南 iOS SDK 集成指南
  • 拨测API接口+监控方案

    简介 在业务运维场景中 xff0c 需要对核心的API接口进行拨测 而各个接口需要传递的参数或者接口之间的依赖是比较复杂的 xff0c 通常接口之间都是通过链式请求来完成一个业务场景 常见的就是先登录 xff0c 拿到token以后 xff
  • KVM常用命令集合

    背景 曙光的一台物理服务器6240通过KVM进行虚拟化 xff0c 创建多台虚机 记录一下整个过程中常用的命令 物理服务器信息如下 操作系统 Kylin Linux Advanced Server release V10 span clas
  • 通过cfssl自签证书https证书

    背景 公司内部自建Web服务 xff0c 通过自签CA xff0c 然后签发https证书 工具地址 GitHub cloudflare cfssl CFSSL Cloudflare 39 s PKI and TLS toolkit 使用步
  • vSphere Web Client 6.5 如何上传ISO文件

    vSphere Web Client 6 5 如何上传ISO文件 xff1f 1 xff0c 先开启SSH功能 WEB登陆管理端 xff0c 选中一台主机 xff0c 配置 xff0d 安全配置文件 xff0d 服务编辑 xff0d SSH
  • linux中sed在指定字符前后添加内容

    假设文档内容如下 xff1a 1 2 3 4 5 root 64 localhost cat tmp input txt null 000011112222 test 要求 xff1a 在1111之前添加AAA 方法如下 xff1a sed
  • 解决 - Prometheus 监控Kubelet Metrics 报错"server returned HTTP status 403 Forbidden"

    简介 使用prometheus监控kubelet的时候 xff0c 报如下403的错误 xff1a 或者报401的错误 该问题的原因是webhook的授权地址使用127 0 0 1 所以其它IP发起的请求都会被拒绝 将该地址改为0 0 0
  • 为什么每次进入命令都要重新source /etc/profile 才能生效?

    span style color 999988 编辑JDK8 span span style color 0086b3 export span JAVA HOME 61 span style color dd1144 34 usr java
  • MySQL配置文件my.ini的一般设置

    mysqld 设置3306端口 port 61 3306 设置mysql的安装目录 basedir 61 D Software Package mysql 8 0 12 winx64 mysql 8 0 12 winx64 设置mysql数
  • Linux shell脚本编程时bad substitution解决办法

    首先 xff0c 我们要理解bad substitution的字面意思 xff0c 它的字面意思是 替换错误 的意思 这种错误的原因呢 xff0c 通常是我们编写脚本时 和 xff08 xff09 错误使用导致的 比如应该用 xff08 x
  • Vue中的watch 和computed 属性

    之前写过一篇关于computed计算属性的文章 xff0c 详见这里 computed 内的function只执行一次 xff0c 仅当function内涉及到Vue实例绑定的data的值的改变 xff0c function才会从新执行 x
  • Swift使用XMPPFramework做IM即时通信的Demo

    上一篇文章处理了文本中表情的替换 xff0c 现在来完成消息的发送功能吧 xff08 貌似前后并没有逻辑关系哈 xff09 首先为了测试 xff0c 我们需要下载spark工具 xff0c 它可以连接openfire搭建的后台来完成即时通信
  • P1591 阶乘数码

    题目描述 求n 中某个数码出现的次数 输入格式 第一行为 t t 10 xff0c 表示数据组数 接下来 t 行 xff0c 每行一个正整数n n 1000 和数码 a 输出格式 对于每组数据 xff0c 输出一个整数 xff0c 表示 n
  • nginx缓存命中率统计(转)

    转自 xff1a http www libertyvps com thread 275 1 1 html nginx提供了 upstream cache status这个变量来显示缓存的状态 xff0c 我们可以在配置中添加一个http头来
  • windows远程桌面连接到Linux服务器(ubuntu系统)、解决xrdp登录界面port问题、解决password failed

    一 xff1a 一般在windows系统安装ssh客户端远程连接Linux服务器 xff0c 可以很方便地传输文件 xff08 注意 xff1a 文件路径不能有小括号 xff0c 空格之类的 xff0c 不然会出现erro xff09 但如
  • linux之文件系统命令

    第一章 linux之帮助命令 第二章 linux命令行快捷键 第三章 linux之防火墙 第四章 linux之服务开机自启 第五章 linux之关机与重启 第六章 linux之环境变量 第七章 linux之目录操作命令 第八章 linux之

随机推荐