gpt4 book ai didi

c++ - 为什么函数立即完成一次循环,然后再次运行?

转载 作者:行者123 更新时间:2023-11-28 02:54:08 26 4
gpt4 key购买 nike

这是代码,我的输出,下面是预期的输出。

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
class geometricShape
{
protected:
const double pi = acos(-1);
string userInputHeight = "";
string userInputRadius = "";
double height = 0;
double radius = 0;
public:
void setValues()
{
while (true)
{
cout << "Please input the height: " << endl;
getline(cin, userInputHeight);
stringstream heightStream(userInputHeight);
cout << "Please input the radius:" << endl;
getline(cin, userInputRadius);
stringstream radiusStream(userInputRadius);
height = atof(userInputHeight.c_str());
radius = atof(userInputRadius.c_str());
if (heightStream >> height && radiusStream >> radius && height > 0 && radius > 0)
{
break;
}
cout << "Invalid input, please try again." << endl;
}
}
};
class cylinder : public geometricShape
{
public:
double volume()
{
double radiusSquared = radius * radius;
double cylinderVolume = pi*radiusSquared*height;
return cylinderVolume;
}
};
int main(void)
{
int userInput = 0;
cout << "Please choose a volume to calculate: " << endl;
cout << "1. Cyliner." << endl;
cout << "2. Cone." << endl;
cin >> userInput;

switch (userInput)
{
case 1:
{
//call right circular cylinder function
cylinder cylndr;
cylndr.setValues();
cout << cylndr.volume() << endl;

break;
}
case 2:
{
cout << "case 2";
break;
}
default:
{
cout << "Invalid selection, please choose again." << endl;
}

}


cin.get();

}

当我为 Cylinder 按 1 时,我希望它会要求我“请输入高度:”,然后等待响应,然后要求输入半径。

实际发生的是它立即打印出两条消息,然后告诉我我的输入不正确,然后第二次正确运行。

最佳答案

当您的 cin>>userInput 执行时,它只从流中读取整数并在流中留下换行符(当您按回车键时)。您的 getline 函数一直读取直到找到一行的结尾,该行已经存在于 cin 流中,因此您的 userInputHeight 被读取并包含一个空行。

所以你可以通过做这样的事情来修复你的代码

cin>>userInput;
cin.ignore();

这将忽略 cin 流中存在的所有内容,您可以继续执行代码。

关于cin.ignore的更多解释已经结束herehere

关于c++ - 为什么函数立即完成一次循环,然后再次运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22396388/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com