黑马程序员-关于C语言多文件联合输出
来源:互联网 发布:红旗linux官网 编辑:程序博客网 时间:2024/05/22 05:02
对于对文件联合输出的参考
在函数这一节MJ老师建了一个文件夹在里面向我们展示了多文件联合开发,
注意点:
1.函数的定义放.c文件,函数的声明放.h文件
2.如果要使用某个.c文件中定义的函数,只需要#include这个.c文件对应的.h文件(<stdio.h>是系统自带的用尖括号,自己建立的就要用引号)
3..h文件的作用:被别人拷贝。编译链接的时候不需要管.h文件
4.cc xx.o xxx.o将多个目标文件链接在一起
ccxx.c xxx.c 将多个源文件编译、链接
仔细试了老师的做法后 我尝试了用三个文件联合开发
主要思想:用one.c编写主函数 two.c编写计算的算法 three.c编写输入输出函数。这样写与MJ老师的不同是 他是直接给程序赋值两个分数,我的是让用户输入两个分数的。而且把输入输出都写在了three.c 这样主函数就不用管输入输出的算法,也就可以让主函数不包含#include<stdio.h>了。二号和三号的声明文件放在two.h和three.h。主函数只需要包含这两个。
下面是各文件代码
one.c
/*
用三个人的文件联合成一个程序,为的是彻底思路清晰,以后多文件联合不会懵
这样写只有三号文件需要#include<stdio.h>,一号文件(主函数)只需要引用two.h three.h
*/
#include "two.h"
#include "three.h"
int score1 =0,score2 =0,c =0,d = 0; // c存放总分d存放平均分
int main()
{
into(&score1,&score2); // 用三号文件里的录入函数给用户提示并录入数据
c = sum(score1,score2); // 然后用二号文件里的计算函数计算
d = average(score1,score2);
outto(c,d); // 然后用三号文件里的输出函数把最后答案输出
return0;
}
two.c
int sum(int x ,int y) // 求和函数
{
return x + y;
}
int average(int a,int b) // 求平均函数
{
return (a + b) /2;
}
three.c
#include <stdio.h> // 只有三号文件才有输入输出只有这个才包含
void into(int *a,int *b ) // 设置两个指针
{
printf("请输入两门课的分数:\n");
scanf("%d %d",a ,b ); // 因为前面传的就是地址,所以这里就是a和b
}
void outto(int x,int y)
{
printf("两门课的总分是%d平均分是%d\n",x,y); // 输出
}
two.h
#ifndef TWO_H
#define TWO_H
int sum(int x,int y);
int average(int a,int b);
#endif
因为写这篇日志的时候已经学到预处理命令这了,所以顺便把防止重复导入的宏定义加上了。
three.h
#ifndef THREE_H
#define THREE_H
void into(int *a ,int *b);
void outto(int x,int y );
#endif
运行结果
期间遇到的问题:
虽然最终还是运行成功但是其中还是遇到了一些问题。
1. 一开始是把score1和score2定义在main函数里面的因为这个不是在一个主函数里完事的所以后面出现了错误提示无法调用函数,所以就把score1和score2直接拉到了外面成为全局变量,这样就可以访问了。
2. 因为把分数录入放到了第二个文件,所以单纯的实参形参值传递改不了原本score1和score2的值。在全局变量定义的时候是把两个值都初始化了为0.运行之后平均分总分都是0. 然后就想到了用指针使用地址传递&score1那边的形参定义指针类型,然后下面直接接收地址,之后程序就调试成功无警告无错误顺利运行了。
3. 中间还犯了比较低级的错误就是在调试的时候把函数定义的形参改了类型但是声明里面的忘了改,然后就出现了警告直接运行就是程序崩溃
Segmentation fault: 11
正好当时还没网不能查错误,仔细看提示哪个文件第几行才找到了病根。以后这些粗心错误也真是需要坚决制止,为了这种低级错误浪费时间太不值得了。
- 黑马程序员-关于C语言多文件联合输出
- 【黑马程序员】C语言文件
- 黑马程序员-C语言-文件
- 黑马程序员-c语言结构体,联合以及枚举
- C语言输出格式总结 黑马程序员
- 黑马程序员关于c语言数组详解
- 9、黑马程序员-C语言inclue和多文件开发
- 【黑马程序员】c语言的文件操作
- 黑马程序员--学习C语言文件操作
- 黑马程序员-------C语言----文件读写
- 【黑马程序员】C语言基础-文件管理
- 黑马程序员—C语言输入与输出
- 黑马程序员 C语言---关于if switch学习总结
- 黑马程序员---C语言:关于内存的分布
- 黑马程序员--C语言入门疑难点----进制,文件
- 黑马程序员——c语言基础:文件管理
- 黑马程序员-C语言文件操作相关函数
- 黑马程序员-[C语言] 第四篇:文件操作总结
- QT中的buttonbox、QMessageBox等默认控件如何显示中文
- HTML5页跳转到Native页面-监听机制
- Android 高仿微信实时聊天 基于百度云推送
- Linked List Cycle II
- C++中#if #ifdef 的作用
- 黑马程序员-关于C语言多文件联合输出
- cocoaPods的安装和使用
- 反射
- 百度Push(云推送)使用基础篇
- centOS7.0设置默认进入字符界面
- Why Singletons are Evil
- 【Linux入门学习之】vi/vim编辑器必知必会
- 每天记录一点点
- Binary Tree Inorder Traversal