很多C++初学者,代码写出来感觉没问题,但就是运行不对。编译报错、运行崩溃、答案错误……
其实,这些都是信奥初学者常见的“坑”。今天,我总结C++初学者最容易踩的10个坑,附详细避坑指南,让孩子少走弯路。
错误代码:cout << "Hello World"
错误提示:expected ‘;’ before ‘}’ token
避坑指南:C++每条语句结尾都必须有分号。养成写完一行就加分号的习惯。
错误代码:int a; cout << a; // a的值是随机的
问题:输出一个随机数,导致答案错误
避坑指南:定义变量时一定要初始化,int a = 0; 养成好习惯。
错误代码:int a[10]; a[10] = 5; // 下标从0到9,没有a[10]
问题:程序崩溃或数据被篡改
避坑指南:定义数组时多开5-10个空间,如int a[15]; 遍历时注意下标范围。
错误代码:if (a = 5) // 这是赋值,不是判断
问题:条件永远成立,逻辑错误
避坑指南:判断相等用==,赋值用=。写if语句时先写常量:if (5 == a) 这样写错会编译报错。
错误代码:int a = 5/2; // 结果是2,不是2.5
问题:精度丢失,答案错误
避坑指南:需要小数结果时用double,或者强制转换:(double)a/b。
错误代码:用了freopen忘记关
问题:后续代码无法正常读写
避坑指南:用fclose关闭文件,或者用局部作用域自动关闭。
错误代码:int a = 100000 * 100000; // int溢出
问题:结果错误,变成负数
避坑指南:看到数据范围超过10^9,果断用long long。
错误代码:scanf("%d", a); // 少了&
问题:程序崩溃
避坑指南:scanf变量前一定要加&,除了字符串。建议用cin,不易出错。
错误代码:全局int a; 函数内int a; 函数内用的是局部变量
问题:逻辑混乱
避坑指南:全局变量用g_前缀,如g_a;局部变量正常命名。
错误代码:用了vector但没#include <vector>
问题:编译报错
避坑指南:信奥常用头文件:#include <bits/stdc++.h> 万能头,一次搞定。
学员小博的亲身经历:“我第一次参加模拟赛,写了100多行代码,编译一直报错。找了两个小时,最后发现是第8行少了个分号。从那以后,我每写一行都检查分号。”
薛老师点评:这些小错误,每个信奥选手都犯过。关键是要总结成自己的“避坑清单”,下次不再犯。
这些坑,每个信奥选手都踩过。踩坑不可怕,可怕的是踩完不总结。
把这10条记下来,写代码时多留意,能省下大量debug时间。
📞 想获取完整《C++避坑手册》?可添加薛老师微信免费领取。