类型转换
- 小到大,自动转换;
- 大到小,强制类型转换,会损失精度(舍弃小数);
// 小到大,自动转换
int a = 10;
double b = 21.5;
double c = a + b; // a自动转为double
//大到小,强制转换
int d = a + (int)b; // 31
// 强制转换
int a = 5;
int b = 10;
double c = (double) a / b; // 整数除以整数 得整数;强制类型转换 优于 除运算符
类型的自动转换(数据提升)
错误处理
- 程序运行错误时,可以通过<errno.h>头文件获取错误码,errno变量获取;
- errno错误码为int, 0 表示成功;
- perror(“提示:”) 直接输出错误信息(字符串);
- strerror(errno) 将错误码转为错误字符串;然后fprintf(stderr)
#include <stdio.h>
#include <errno.h>
#include <string.h> //三个头文件必须包含
int main ()
{
FILE * ptr;
ptr = fopen ("lauf.txt", "rb");
if (ptr == NULL)
{
// !pf
// 直接输出错误信息
perror("打开文件失败");
// 输出错误码
fprintf(stderr, "错误号: %d\n", errno);
// strerror 输出错误信息
fprintf(stderr, "打开文件错误: %s\n", strerror( errnum ));
}
else
{
fclose (pf);
}
return 0;
}
零除的错误,自己判断除数是否为0即可;
使用exit(0),成功退出程序;
使用exit(-1),失败退出;
递归
- 函数内部调用自身;
- 须有明确的停止条件;
// 斐波那契数列
#include <stdio.h>
int fibonaci(int i)
{
if(i == 0)
{
return 0;
}
if(i == 1)
{
return 1;
}
return fibonaci(i-1) + fibonaci(i-2);
}
int main()
{
int i;
for (i = 0; i < 10; i++)
{
printf("%d\t\n", fibonaci(i));
}
return 0;
}
可变参数
- 函数传参数时,个数不确定;
- 使用<stdarg.h>头文件;
- va_list 类型的变量,负责接收参数,形成参数列表;
- va_start(va_list argList, int num); 为va_list类型的参数初始化num个参数的列表;
- va_arg(va_list, type); 获取列表中的每一个参数,type为下一个参数的类型;
- va_end(va_list argList); 释放argList的内存;
整型参数列表
#include <stdio.h>
#include <stdarg.h> // 必须使用该头文件
// 第一个参数为 可变参数的个数
// ... 表示可变参数列表
int lauf(int num, ...)
{
// 声明可变参数列表
va_list argList;
// 为 num 个参数初始化 argList 列表
va_start(argList, num);
int arg;
// 逐一打印参数
for (i = 0; i < num; i++)
{
// 获取每一个参数
arg = va_arg(argList, int); //下一个参数类型 根据实际情况决定
printf("per arg: %d\n", arg);
}
// 清理为 argList 内存
va_end(argList);
return 0;
}
int main()
{
printf("args of 2, 3, 4, 5 = %f\n", lauf(4, 2,3,4,5)); // 4个参数
printf("args of 5, 10, 15 = %f\n", lauf(3, 5,10,15)); //3个参数
}
字符串参数列表
#include <stdarg.h>
int lauf1(int num, ...) {
// 声明可变参数列表
va_list argList;
// 初始化
va_start(argList, num);
char* arg;
for (int i = 0; i < num; i++) {
arg = va_arg(argList, char*);
printf("per arg: %s\n", arg);
}
// 释放内存
va_end(argList);
return 0;
}
int main() {
lauf1(3, "tom", "jack", "lucy");
system("pause");
return 0;
}
[上一篇]:C语言编程—字符串与结构体
[下一篇]:C语言编程—内存管理和命令行参数