最近翻电脑旧文件翻出了我当年初学C语言时亲手记的老笔记。全是当年没人带、没人教纯靠自己写代码报错、熬夜调试一点点踩坑总结出来的血泪经验。课本只会讲标准语法这些藏在实操里的隐形坑老师基本不会细讲。但初学写代码时80%的诡异bug、莫名其妙的报错全都出自这些细节。下面这10条最经典的初学翻车笔记每条都附带我当年真实踩坑经历 可直接运行的演示代码。正在学C的新手认真看完能少走半年弯路。1. 浮点数精度丢失写记账程序金额永远差0.000001初学练手写小计费程序时我一直纳闷为什么简单的小数相加结果永远差一点点后来才懂核心原理很多十进制小数转二进制是无限循环小数电脑存不下只能截断保存天然带误差。错误示范新手必写#include int main(void) { float money 0.1f; if (money 0.1f) { printf(相等\n); } return 0; } // 相等判断永远不会执行最大误区浮点数绝对不能用判断相等。正确写法误差比对#include #include int main(void) { float a 0.1f; float b 0.1f; if (fabs(a - b) 1e-6) { printf(数值相等\n); } return 0; }2. long long不加LL后缀大数悄悄溢出全错刚学long long的时候我完全不知道数字常量默认是int。数字稍微大一点不加LL直接溢出截断算出来的结果完全离谱。// 错误写法大数默认int溢出出错 long long num1 9223372036854775807; // 正确写法 long long num2 9223372036854775807LL;3. long long不初始化变量忽对忽错玄学现场初学写代码特别懒变量随手定义不初始化。当时经常遇到一个玄学问题代码没变有时候结果对、有时候错。后来才知道局部变量不初始化里面是栈内存遗留的随机乱码运算自然飘忽不定。long long data1; // 翻车随机脏数据 long long data2 0;// 规范定义必清零4. 除数为0随手一写程序直接闪退初学写公式经常不小心出现变量为0的情况程序直接闪退。C语言除0是硬性崩溃红线不会警告、直接终止。int res 10 / 0; // 经典翻车5. 返回值-1用char接收类型坑导致莫名报错初学调用库函数看到返回-1代表失败随手用char去接收。实际char存负数极易出异常符号错乱。新手统一记住接收函数返回值全部用int。char ret1 -1; // 错误写法 int ret2 -1; // 稳妥写法6. unsigned减法溢出倒计时突然变超大数这是我初学觉得最玄学的bug。写倒计时功能用了unsigned变量减到不够减的时候不会变负数直接溢出成超级大数判断逻辑全部失效。#include int main(void) { unsigned int num 2; num num - 5; // 不是-3是超大正数 printf(%u\n, num); return 0; }7. float/double精度有限高精度计算全白写float只有6~7位有效数字double只有15~16位有效数字。数值一旦过长后面全是虚假乱数精密计算绝对不能用float。8. char越界翻转赋值128正数变负数char范围-128~127强行赋值128会循环翻转成负数判断条件直接错乱。9. i与i混用循环逻辑悄悄乱i先取值后自增i先自增后取值。嵌套代码里混用会出现肉眼完全看不出来的逻辑bug。10. 浮点数判等必须用误差区间新手一定要养成习惯浮点比较永远这样写if (fabs(a - b) 1e-6)这10条里面我最惨的是unsigned减法溢出那一回倒计时变超大数查了一晚上没睡着。你初学C语言时被浮点数精度、unsigned溢出、还是char越界坑得最惨评论区告诉我你踩过哪个——1浮点数2unsigned3char我看看哪个是“初学全民公敌”