C++程序运行输出空白无法使用cin输入的问题咨询
代码问题分析
核心故障原因
你观察到的「运行后控制台空白、无法输入」本质是程序没有输出任何提示信息,你不知道程序正处于等待输入的状态,并不是真的无法输入:此时直接输入两个整数按回车,连续输入3组,程序会正常运行结束,计算结果会写入你指定的txt文件中。
代码存在的具体问题
- 没有向控制台输出输入提示:你所有的输出操作都是面向文件流
outfile的,没有调用标准输出流cout打印任何提示内容,程序启动后控制台无任何文字,使用者会误以为程序卡住。 - 缺少文件打开合法性校验:你直接使用
outfile写入内容,如果指定的路径不存在(比如系统用户名不匹配、桌面路径被修改)、或程序没有对应路径的写入权限,文件流会进入失效状态,后续所有写入操作都会无效,且不会抛出任何报错。 - 可选优化问题:计算斜边时调用
pow计算整数平方没有必要,pow是面向浮点数的运算函数,用于整数计算反而可能引入精度损失,也会增加不必要的性能开销。 - 笔误:表头的
Hypotenus Length拼写错误,正确拼写为Hypotenuse Length。
修复后的参考代码
#include <iostream> #include <cmath> #include <fstream> using namespace std; int main () { int leg1, leg2; double hypotenuse; ofstream outfile("C:\\Users\\Irwin Chrisman\\Desktop\\HYPLENG.txt"); // 新增文件打开校验 if (!outfile.is_open()) { cout << "文件打开失败,请检查路径是否合法、是否有写入权限" << endl; return 1; } outfile <<"Hypotenuse length of three triangles"<<endl<<endl; outfile <<"Triangle number\tLeg 1 length\tLeg 2 length\tHypotenuse Length"<<endl; // 新增控制台输入提示 cout << "请输入第1个三角形的两个直角边长度,用空格分隔:"; cin >> leg1 >> leg2; // 优化斜边计算逻辑 hypotenuse = sqrt(1.0 * leg1 * leg1 + 1.0 * leg2 * leg2); outfile <<"1\t\t"<<leg1<<"\t\t"<<leg2<<"\t\t"<<hypotenuse<<endl; cout << "请输入第2个三角形的两个直角边长度,用空格分隔:"; cin >> leg1 >> leg2; hypotenuse = sqrt(1.0 * leg1 * leg1 + 1.0 * leg2 * leg2); outfile <<"2\t\t"<<leg1<<"\t\t"<<leg2<<"\t\t"<<hypotenuse<<endl; cout << "请输入第3个三角形的两个直角边长度,用空格分隔:"; cin >> leg1 >> leg2; hypotenuse = sqrt(1.0 * leg1 * leg1 + 1.0 * leg2 * leg2); outfile <<"3\t\t"<<leg1<<"\t\t"<<leg2<<"\t\t"<<hypotenuse<<endl; outfile.close(); cout << "计算完成,结果已写入目标文件" << endl; return 0; }
内容的提问来源于stack exchange,提问作者Irwin Chrisman
相关产品推荐
相关产品推荐

