用cin读三个边长计算周长需先校验输入合法性与三角形条件:检查cin.fail()并清缓冲,确保a>0&&b>0&&c>0且a+b>c&&a+c>b&&b+c>a,最后输出周长sum,注意格式要求。

怎么用 cin 读三个边长并算周长
三角形周长就是三边相加,但得先确保输入的是合法数字,且能构成三角形。C++ 里最直接的方式是读三个 double 或 int,然后加总——但别急着输出,先校验。
常见错误:用户输字母或空格,cin 失败后流状态变坏,后续读取全跳过;或者输三个数但不满足三角形不等式(任意两边之和大于第三边),结果数学上不成立。
- 用
cin >> a >> b >> c一次读三个值,比三次单独cin更稳 - 读完立刻检查
cin.fail(),失败就清空缓冲区:cin.clear(); cin.ignore(10000, '\n'); - 校验三角形:写成
a + b > c && a + c > b && b + c > a,别只判一边,浮点数慎用>= - 如果要求整数输入但允许小数边长,统一用
double,避免截断误差
sqrt 和 pow 不是用来算周长的
新手常混淆周长和面积,看到“数学公式”就下意识翻 <cmath>,调 sqrt 或 pow。周长不需要开方、乘方,纯加法。引入这些函数不仅多余,还可能因忘记 #include <cmath> 导致编译报错 error: 'sqrt' was not declared in this scope。
- 只算周长?头文件够用
#include <iostream>就行 - 如果后续要算面积(比如海伦公式),才需要
#include <cmath>和sqrt -
pow(a, 2)算平方远不如a * a快,且对整数可能隐式转 double,引发精度疑问
输出格式不对会丢分(尤其 OJ 场景)
很多入门题要求“保留一位小数”或“输出整数”,但代码里直接 cout << sum,结果样例过不了。这不是逻辑错,是格式错。
立即学习“C++免费学习笔记(深入)”;
- 要保留小数:加上
#include <iomanip>,用cout << fixed << setprecision(1) << sum; - 如果题目说“数据保证为整数”,但你用了
double输入,输出时仍可能显示12.0,需强制转整型或控制格式 - 注意换行:
cout << sum << '\n';比<< endl更轻量,避免刷缓冲影响性能
边长为 0 或负数怎么办
题目没说边长范围,但实际输入可能为 0 或负。数学上边长必须 > 0,且三角形不等式在含 0 或负数时自动失效。不处理的话,程序可能算出负周长或通过虚假校验。
- 在校验三角形前,先判断
a > 0 && b > 0 && c > 0 - 别用
abs()强行转正——边长不能是绝对值,那是篡改输入 - OJ 输入通常保证合法,但本地测试建议加这层判断,否则调试时看到
-5.0当周长会懵几秒
事情说清了就结束。真正卡住人的往往不是公式,而是输入没清缓存、输出少个 fixed、或者把面积当周长去调 sqrt。










