程序在运行两次后关闭
Program closes after running twice
很多代码,所以通读起来有点高难度。如果您愿意花时间,请表示感谢!
为了解释我所做的,这是一个将某些测量单位转换为其他测量单位的程序。用户选择他们想要转换的单位以及该单位的数量。
程序运行后,用户将被发送回主选项菜单,他们可以在其中关闭程序或继续进行其他转换。
但是,我的问题是,程序运行良好,除了两次迭代后停止外,一切正常。如果用户转换了某些内容,然后再次转换,则程序结束,此时它应该继续,直到用户选择该选项。
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int answer, subAnswer;
void printIntro();
double mainMenu();
void printOutro();
double length();
double weight();
double volume();
double area();
void printAnswer(double, string, double, string);
// for length conversions
double inches, yards, miles;
double cm, ms, km;
// for weight conversions
double ounces, pounds, tons;
double grams, kGrams;
// for volume conversions
double pints, quarts, gallons;
double liters;
// for area conversions
double sq_milo, sq_meters;
double sq_inches, sq_feet, acres;
int main()
{
printIntro();
mainMenu();
printOutro();
system("pause");
return 0;
}
void printIntro()
{
cout << "tWelcome to the Unit Conversion helper." << endl;
cout << "nPick from the following menu to get started." << endl;
cout << "Example: Type '1' to select length conversions.n" << endl;
}
double mainMenu()
{
cout << "***************************************************n";
cout << "1. Lengthsn";
cout << "2. Weightsn";
cout << "3. Volumesn";
cout << "4. Areasn";
cout << "5. Quit programn";
cout << "***************************************************" << endl;
cin >> answer;
if (answer == 1)
{
length();
}
if (answer == 2)
{
weight();
}
if (answer == 3)
{
volume();
}
if (answer == 4)
{
area();
}
if (answer == 5)
{
exit(0);
}
return 0;
}
double length()
{
cout << "nWhat would you like to convert?" << endl;
cout << "1. Convert Inches to centimeters." << endl;
cout << "2. Convert Yards to meters." << endl;
cout << "3. Convert Miles to kilometers.n" << endl;
cin >> subAnswer;
if (subAnswer == 1)
{
cout << "How many inches?n" << endl;
cin >> inches;
cm = inches * 2.54;
printAnswer(inches, " Inches is equal to ", cm, " Centimeters.n");
}
if (subAnswer == 2)
{
cout << "How many yards?n" << endl;
cin >> yards;
ms = yards * 0.9144;
printAnswer(yards, " Yards is equal to ", ms, " Meters.n");
}
if (subAnswer == 3)
{
cout << "How many miles?n" << endl;
cin >> miles;
km = miles * 1.609344;
printAnswer(miles, " Miles is equal to ", km, " Kilometers.n");
}
return cm, ms, km;
}
double weight()
{
cout << "nWhat would you like to convert?" << endl;
cout << "1. Convert Ounces to grams." << endl;
cout << "2. Convert Pounds to kilograms." << endl;
cout << "3. Convert Tons to kilograms.n" << endl;
cin >> subAnswer;
if (subAnswer == 1)
{
cout << "How many ounces?n" << endl;
cin >> ounces;
grams = ounces * 28.349523;
printAnswer(ounces, " Ounces is equal to ", grams, " Grams.n");
}
if (subAnswer == 2)
{
cout << "How many pounds?n" << endl;
cin >> pounds;
kGrams = pounds * 0.453592;
printAnswer(pounds, " Pounds is equal to ", kGrams, " Kilograms.n");
}
if (subAnswer == 3)
{
cout << "How many tons?n" << endl;
cin >> tons;
kGrams = tons * 907.18474;
printAnswer(tons, " Tons is equal to ", kGrams, " Kilograms.n");
}
return grams, kGrams;
}
double volume()
{
cout << "nWhat would you like to convert?" << endl;
cout << "1. Convert pints to liters." << endl;
cout << "2. Convert quarts to liters." << endl;
cout << "3. Convert gallons to liters.n" << endl;
cin >> subAnswer;
if (subAnswer == 1)
{
cout << "How many pints?n" << endl;
cin >> pints;
liters = pints * 0.4731631;
printAnswer(pints, " Pints is equal to ", liters, " Liters.n");
}
if (subAnswer == 2)
{
cout << "How many quarts?n" << endl;
cin >> quarts;
liters = quarts * 0.946326;
printAnswer(quarts, " Quarts is equal to ", liters, " Liters.n");
}
if (subAnswer == 3)
{
cout << "How many gallons?n" << endl;
cin >> gallons;
liters = gallons * 3.785306;
printAnswer(gallons, " Gallons is equal to ", liters, " Liters.n");
}
return liters;
}
double area()
{
cout << "nWhat would you like to convert?" << endl;
cout << "1. Convert square inches to square millimeters." << endl;
cout << "2. Convert square feet to square meters." << endl;
cout << "3. Convert acres to square meters.n" << endl;
cin >> subAnswer;
if (subAnswer == 1)
{
cout << "How many square inches?n" << endl;
cin >> sq_inches;
sq_milo = sq_inches * 645.16;
printAnswer(sq_inches, " Square Inches is equal to ", sq_milo,
" Square Millimeters.n");
}
if (subAnswer == 2)
{
cout << "How many square feet?n" << endl;
cin >> sq_feet;
sq_meters = sq_feet * 0.09290304;
printAnswer(sq_feet, " Square feet is equal to ", sq_meters,
" Square Meters.n");
}
if (subAnswer == 3)
{
cout << "How many acres?n" << endl;
cin >> acres;
sq_meters = acres * 4046.86;
printAnswer(acres, " Acres is equal to ", sq_meters,
" Square Meters.n");
}
return sq_milo, sq_meters;
}
void printOutro()
{
cout << "Returning to the main menu. If you're done, type 5.n" << endl;
cout << mainMenu();
}
void printAnswer(double cTemp, string sTemp, double dTemp, string rTemp)
{
cout << endl;
cout << cTemp << sTemp << dTemp << rTemp << endl;
}
第一件事:
double length()
{
...
...
return cm, ms, km;
}
这总是返回公里,其他的将不返回。
而且有不好的逻辑:
printIntro();
mainMenu();
printOutro();
程序在运行两次后关闭,因为您以这种方式编写它。看上面的几行。你打印介绍,下一个打印主菜单,并执行用户想要的内容,然后打印输出。Outro再次调用主菜单。在该计划关闭之后。
按如下方式修改主菜单:
int main()
{
while(1)
{
printIntro();
mainMenu();
printOutro();
}
return 0;
}
并在 printOutro() 中摆脱cout << mainMenu();
相关文章:
- Realloc 两次无法在 Visual Studio 上运行
- 谷歌测试发现在macOSX上添加并运行了我的所有测试两次
- C++:链接库两次,全局构造函数运行两次吗?
- 程序在运行两次后关闭
- *char数组到字符串(两次运行代码和两个不同的结果)
- 析构函数在 lambda 捕获说明符中声明的类实例上运行两次
- Cmake并需要两次运行才能成功构建代码
- 为什么输入文件的最后一行运行两次?
- c++ Google 测试运行两次
- Linux 守护进程 - 运行函数两次
- 我找不到导致我的数组在运行两次案例并退出后损坏的错误
- cmake 不会设置MPI_C_LIBRARIES,除非它运行两次
- 当循环应该只运行一次时,执行两次while循环(C++)
- 为什么这个C++/OpenGL程序运行两次
- 我的C++ Unity 插件在编辑器中运行一次,但不能运行两次
- 函数读取输入并运行函数两次
- 连续运行两次后的 scons 行为
- C++ 开关结构(运行最后一种情况两次)
- 函数在控制台中运行两次
- Cocos2D-X 运行 Lua 脚本两次