尝试编写一个程序来计算体积,表面积或" Girth"一个盒子。我希望能够为每个主题输入一个字母,然后在计算该主题后,输入下一个主题的字母。该程序还希望在键入Q时结束。我相信我的数学是正确的,但这个程序对我不起作用。它编译得很好,但音量根本不会计算,尽管其他两个主题会。我还得到了三行答案,当我输入第二个字母作为第二个值时,程序就疯了。任何和所有的帮助非常感谢。谢谢你的时间。
include <iostream>
include <iomanip>
using namespace std;
const char SENTINEL = 'Q';//found this suggestion online to quit a program
int main ()
{
char V, A, G, inputChar;
float length, width, depth, totalV, totalA, totalG;
cout<<"Enter character V for Volume, character A for Surface Area,\n";
cout<<"character G or Girth plus Depth or Q to quit\n"<<endl;
cin>>inputChar;// pick letter
while (inputChar!=SENTINEL)// if not Q then check the if-ele statments
{
switch (inputChar)
case 'V':
{
cout<<"Enter Length, Width, and Depth for Volume\n";
cin>>length, width, depth;
totalV=length*width*depth;//math for volume
cout<<"The Volume = "<<totalV<<endl;
break;
}
case 'A':
{
cout<<"Enter Length, Width, and Depth for Surface Area\n";
cin>>length, width, depth;
totalA=2*length*width+2*width*depth+2*length*depth;//math for area
cout<<"The Surface Area = "<<totalA<<endl;
break;
}
case 'G':
{
cout<<"Enter Length, Width, and Depth for Girth\n";
cin>>length, width, depth;
totalG=2*(length+width)+depth;//math for girth
cout<<"The Girth = "<<totalG<<endl;
break;
}
}
system ("pause");
return 0;
}
答案 0 :(得分:7)
添加到Elliot的答案,我发现你的程序有一些改进,没有它我认为它不会编译。像include语句中的'#'和错误的开关块一样。即使输入多个值,我们也需要级联&gt;&gt;但不是逗号。
这是一个可编译的代码:
#include <iostream>
#include <iomanip>
using namespace std;
const char SENTINEL = 'Q';//found this suggestion online to quit a program
int main ()
{
char V, A, G, inputChar;
float length, width, depth, totalV, totalA, totalG;
cout<<"Enter character V for Volume, character A for Surface Area,\n";
cout<<"character G or Girth plus Depth or Q to quit\n"<<endl;
cin>>inputChar;// pick letter
while (inputChar!=SENTINEL)// if not Q then check the if-ele statments
{
switch (inputChar)
{
case 'V':
cout<<"Enter Length, Width, and Depth for Volume\n";
cin>>length>>width>>depth;
totalV=length*width*depth;//math for volume
cout<<"The Volume = "<<totalV<<endl;
break;
case 'A':
cout<<"Enter Length, Width, and Depth for Surface Area\n";
cin>>length>>width>>depth;
totalA=2*length*width+2*width*depth+2*length*depth;//math for area
cout<<"The Surface Area = "<<totalA<<endl;
break;
case 'G':
cout<<"Enter Length, Width, and Depth for Girth\n";
cin>>length>>width>>depth;
totalG=2*(length+width)+depth;//math for girth
cout<<"The Girth = "<<totalG<<endl;
break;
}
cout<<"Enter character V for Volume, character A for Surface Area,\n";
cout<<"character G or Girth plus Depth or Q to quit\n"<<endl;
cin>>inputChar;// pick letter
}
return 0;
}
答案 1 :(得分:6)
写
while ( cin >> inputChar && inputChar != SENTINEL )
{
//...
而不是
cin>>inputChar;// pick letter
while (inputChar!=SENTINEL)//
你也可以写
auto prompt = []
{
cout << "\nEnter character V for Volume, character A for Surface Area,\n";
cout << "character G or Girth plus Depth or Q to quit\n"<<endl;
};
while ( prompt(), cin >> inputChar && inputChar != SENTINEL )
{
//...
或者
auto prompt = []
{
cout << "\nEnter character V for Volume, character A for Surface Area,\n";
cout << "character G or Girth plus Depth or Q to quit\n"<<endl;
};
prompt();
while ( cin >> inputChar && inputChar != SENTINEL )
{
switch (inputChar)
{
case 'V':
{
//...
}
//...
}
prompt();
}
答案 2 :(得分:4)
您永远不会更新inputChar
。在while
循环结束时,请阅读另一个char
,
cin>>inputChar;
}
system ("pause");
否则,当char与您的switch case或sentinel不匹配时,它将进入一个紧密循环(可能具有高CPU使用率)。
答案 3 :(得分:2)
您需要在while循环内再次提示用户输入数据:
do
{
cout << "Enter character 'V' for Volume, character 'A' for Surface Area,\n";
cout << "character 'G' for Girth plus Depth or 'Q' to quit\n"<<endl;
//Right here before the switch statement
cin >> inputChar;
switch (inputChar)
{
//I also recommend stacking your cases, for lower case and upper case support:
case 'V':
case 'v':
{
//
}
case 'A':
case 'a':
{
//
}
case 'G':
case 'g':
{
//
}
//Add a default case if they're not any of the above letters
default:
{
cout << inputChar << " is not valid input!";
}
}
} while (inputChar != SENTINEL);
答案 4 :(得分:1)
只需添加cin&gt;&gt; inputChar; 在while循环结束时。而已。 只需在那之后编译&amp;跑。 您将获得预期的输出。 : - )
-Jayesh