头文件的书写
头文件实现函数声明,在使用模板后可以实现一个C文件中即使重复包含某个头文件,在系统中用于只会确认为一个包含
头文件包含可以理解为将头文件内容替换#include“...”行
模板(dong.h):
#ifndef _DONG_H_ #define _DONG_H_ //其它内容 #endif
编译工具的使用
C语言(gcc)、C++语言(g++)
编译默认输出a.out文件
gcc *
gcc *.c
重命名输出文件
gcc test.c -o newexe
C文件间共享变量
extern
extern是计算机语言中的一个关键字,可置于变量或者函数前,以表示变量或者函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其它模块中寻找其定义,另外,extern也可用来进行链接指定。
举个栗子:
C1.h,声明函数c1fun()
#ifndef _C1_H_ #define _C1_H_ void c1fun(char *strx); #endif
C1.c,实现函数c1fun()
#include<stdio.h> #include"c1.h" char *wu; void c1fun(char *strx){ wu=strx; }
Main.c,调用函数c1fun(),并读取外部变量wu的值
#include <stdio.h> #include "c1.h" extern char *wu; void main(){ c1fun("123456"); printf("===:%s",wu);//输出:123456 }
#define
针对不改变的量,可以在头文件中声明,在其他c文件中包含即可使用
如c1.h中:
#define DONG "dongxiaodong"
Mian.c中:
#include"c1.h" …… printf("===:%s",DONG); …….
命令行传递参数
#include<stdio.h> int main(int vsize,char *vch[]) { int i=1; for(i=1;i<vsize;i++) printf("%d=>%s\n",i,vch[i]); return 0; }
输入和输出
scanf()输入
返回值1为失败,2为正确
int a, b; printf("请输入两个整数,用空格隔开:"); // scanf("%d,%d", &a, &b);//逗号分隔 // scanf("%d-%d", &a, &b);//减号分隔 int i=scanf("%d%d", &a, &b); printf("%d,%d,%d", a, b,i); printf("请输入两个整数,用逗号分隔:"); scanf("%d,%d", &a, &b); printf("%d,%d", a, b);
printf()输出
printf("dongxiaodong %d \n", 100);//格式化输出
printf("东小东\n");//直接输出内容
相关输出百分号意义:
%d 正常输出整数,仅占有本身大小位置
%5d 整数位数不足5(起始为1),前面自动补空,超出则与%d相同
%-5d 整数位数不足5,后面补空,超出则与%d相同
%f,%F 浮点型(float)输出,默认6位小数位,超出则四舍五入
%lf 双精度浮点型(double)
%15f 浮点数总长最小为15,不足则前面补空
%-15f 浮点数总长最小为15,不足则后面补空
%3.2f 前面数组3与上两个解释一样,小数点后的2表示小数位最大为2位,多则四舍五入,少则补零
%c 单个字符
%s 字符串
%p 指针地址(十六进制)
%x,%X 输出不带前缀的十六进制整数,小写x对应小写a、b、c……
%% 输出符号:%
输入输出单个字符
getchar();接收第一个字符,等待用户按下enter键后开始读取
getche();接收第一个字符,用户输入后马上读取,输入显示,头文件【#include<conio.h>】
getch();接收第一个字符,用户输入后马上读取,输入不显示,头文件【#include<conio.h>】
putchar();输出一个字符
#include<stdio.h> void main() { char ch = getchar();//拿到输入的第一个字符 printf("%c\n", ch); putchar(ch);//输出之前输入的字符 putchar('\n');//输出换行符 }
getc()和putc()
原型:
int putc(int char, FILE *stream)
int getc(FILE *stream)
省略步骤:FILE *pfin = stdin;
#include<stdio.h> void main(){ char str[100]; fgets(str,100,stdin);//stdin标准输入,键盘 fputs(str,stdout);//stdout标准输出,屏幕 }
输入输出字符串
Gets()与puts()是不安全的操作,取代方法为fgets()与fputs()
#include<stdio.h> void main(){ char str[100]; fgets(str,100,stdin);//stdin标准输入,键盘 fputs(str,stdout);//stdout标准输出,屏幕 }
调用命令行
输出默认直接到屏幕,需要获取内容可以将其重定向到文件中,然后再取文件(> 、>>)
system("cp -rp dongdir dongdir111");
char类型的区分:
char 或者 signed char 取值范围为 :[-128,127]
unsigned char 取值范围为:[0,255]
‘1’、1、0x01的不同:
‘1’为字符,其对应的十进制为49,对应的十六进制为0x31
1为整型,对应的十进制为1,对应的十六进制为0x01
十进制是逢十进一,十六进制是逢十六进一,如下表,可见0~9中,十进制和十六进制数是完全相同的,可直接用“==”。
int | 0x |
0 | 0(0x00) |
1 | 1 (0x01) |
2 | 2(0x02) |
...... | ...... |
8 | 8(0x08) |
9 | 9(0x09) |
10 | A(0x0A) |
11 | B(0x0B) |
15 | F(0x0F) |
字符(ASCII)与进制之间的转换
字符到进制
#include<stdio.h> #include<stdlib.h> #include<string.h> void main() { char aa = (int)'b';//将ASCII转换为整数 char bufx[120]; itoa(aa, bufx, 16);//进制转换,2 8 10 16 int lend = strlen(bufx); bufx[lend] = 0;//截断数组 //输出:2----62 printf("%d----%s\n", lend,bufx);//输出进制转换后的值 }
十六进制到字符串
#include<stdio.h> #include<stdlib.h> void main() { char chx[] = { 0x82,0x07,0x00,0x01,0x00,0x02,0x6e,0x62,0x00}; char j = 0; const int lenx = sizeof(chx); char strxto[lenx]; for (j = 0; j <lenx; j++) { printf("%c", chx[j]); strxto[j] = (char)chx[j]; } printf("len:%d--data:%s--\r\n", lenx,strxto+6); }