程序在运行两次后关闭

Program closes after running twice

本文关键字:两次 运行 程序      更新时间:2023-10-16

很多代码,所以通读起来有点高难度。如果您愿意花时间,请表示感谢!

为了解释我所做的,这是一个将某些测量单位转换为其他测量单位的程序。用户选择他们想要转换的单位以及该单位的数量。

程序运行后,用户将被发送回主选项菜单,他们可以在其中关闭程序或继续进行其他转换。

但是,我的问题是,程序运行良好,除了两次迭代后停止外,一切正常。如果用户转换了某些内容,然后再次转换,则程序结束,此时它应该继续,直到用户选择该选项。

#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();