C++ 这里怎么了?单元转换器
它一直在进入一个持续的循环,不知道为什么!! 这不是一个任务,只是练习,我正在努力学习,我想做一个单位转换器,但我不确定这是否是野兽的方式,如果你有更好的想法,请随意C++ 这里怎么了?单元转换器,c++,unit-conversion,C++,Unit Conversion,它一直在进入一个持续的循环,不知道为什么!! 这不是一个任务,只是练习,我正在努力学习,我想做一个单位转换器,但我不确定这是否是野兽的方式,如果你有更好的想法,请随意 /// Write a program to promt for units //calcultes and converts units #include <iostream> #include <string> #include <cmath> using namespace std;i
/// Write a program to promt for units
//calcultes and converts units
#include <iostream>
#include <string>
#include <cmath>
using namespace std;int main () {
string re_Run, units;
do{
int f1;
cout<<"enter force: >";
cin>>f1;
cout<<"enter units: >";
cin>>units;
string units, N, kN, lb, kip;
double conv_lb, conv_N, conv_kN;
do{
if (f1<1000 && units == "N"){
cout<<f1<<" N";
}
else if (f1>1000 && units == "kN"){
cout<<f1<<" kN";
}
else if (f1>=1000 && units == "N") {//|| x== kN)
conv_N=f1/1000;
cout<<conv_N<<" kN"; //convert from N to kN
}
else if (f1<1000 && units== "lb" ){
cout<<f1<<" lb";
}
else if (f1>1000 && units== "lb" ){//|| x==kip
conv_lb=f1/1000;
cout<<conv_lb<<" kip";
}
else if (f1>1000 && units== "kip" ){
cout<<f1<<" kip";
}
else {
cout<< "please enter (lb/kip/N/kN)\n >";
cin>>units;
}
}while (units == "N" || units == "kN" || units == "lb" || units =="kip");//(units != "N" && units != "kN" && units != "lb" && units !="kip");
cout<<"re-run?";
cin>> re_Run;
}
while (re_Run == "yes");
return 0;
}
///编写一个程序以提示单位
//计算并转换单位
#包括
#包括
#包括
使用名称空间std;int main(){
串重新运行,单位;
做{
int f1;
cout>f1;
cout>单位;
管柱单位,N,kN,lb,kip;
双转换磅,转换N,转换kN;
做{
如果(f1重新定义单位
变量,使其为空:
cin>>units; // here you read it
string units, N, kN, lb, kip; // here redefinition
可能不需要第二个单位
而内部while循环,因为这就是条件的设置方式:while(units==“N”| | units==“kN”| | units==“lb”| | units==“kip”)
如果units
是N
那么它会循环。我认为你可以删除内部的“do…while”语句,只需保持if-else检查。如果没有无限循环问题,程序仍然会是一样的。当然可以采用其他方法,但这里有一些与您相关的解决方案,如果分析更改,您可以看到问题所在
#include <iostream>
#include <string>
//#include <cmath>
using namespace std;
void printResult(const double f1, std::string& units, bool& legal) {
cout<<f1<<units<<"\n";
units = "";
legal = false;
}
bool check(const std::string& units) {
return (units == "N")||(units == "kN")||(units == "lb")||(units == "kip");
}
int main () {
string re_Run, units;
bool legal(false);
double conv(0.);
double f1(0.);
do{
re_Run = "";
if (f1<1000 && units == "N") {
printResult(f1,units,legal);
}
else if (f1>1000 && units == "kN") {
printResult(f1,units,legal);
}
else if (f1>=1000 && units == "N") {//|| x== kN)
conv=f1/1000;
//cout<<conv_N<<; //convert from N to kN
units = " kN";
printResult(conv,units,legal);
}
else if (f1<1000 && units== "lb" ) {
//cout<<f1<<" lb";
printResult(f1,units,legal);
}
else if (f1>1000 && units== "lb" ) {//|| x==kip
conv=f1/1000;
//cout<<conv_lb<<" kip";
units = " kip";
printResult(conv, units,legal);
}
else if (f1>1000 && units== "kip" ) {
//cout<<f1<<" kip";
printResult(f1,units,legal);
}
else if (legal) {
printResult(f1,units,legal);
}
else {
cout<<"enter force: >";
cin>>f1;
cout<< "please enter (lb/kip/N/kN)\n >";
cin>>units;
legal = check(units);
re_Run = "yes";
}
if (false == legal) {
cout<<"re-run?";
cin>> re_Run;
}
}while (re_Run == "yes");
return 0;
}
#包括
#包括
//#包括
使用名称空间std;
无效打印结果(常量双f1,标准::字符串和单位,布尔值和法定值){
coutSuch的小程序很容易用调试器进行调试。您最喜欢的IDE将帮助您。@Sean Nah,这是一个do..while.应该清除您的输入buffer@Sean-这是一个do while语句。在任何情况下,问题都是变量的阴影-在嵌套范围内有两个同名的变量,因此-在不同的点-循环正在测试旧输入。有两个“单元”字符串变量。在首次成功输入值后,它将继续永远循环,因为您没有重置单位并始终打印相同的转换和其他内容。单位仅在最终的else语句中修改,而如果其中一个if else语句通过,则不会修改单位,循环将继续。您可能希望把else语句的主体放在外面。@Anže同意,内部while
中的最后一个else
应该删除,以便在每次迭代中执行std::cin>
。这只是许多问题中的一个,并没有暴露代码的错误。依我看,还有更重要的“错误”在这里,需要注意教育目的