这是一个与C ++相关的问题。 我需要制作一个读取用户体重/身高的程序。这就是好事和花花公子,但是我遇到了一个问题。
用户需要能够输入一个数字,然后输入一个测量单位。这可以是英尺/英寸,米或厘米。 我已经完成了所有工作,但用户也应该能够写出像5'这样的东西,并且英寸是可选的。 以下是我遇到的问题: 我有两个用于用户输入的变量,一个double(高度)和一个字符串(unitHeight)。这适用于m和cm,但对于英尺/英寸,我需要再添加两个,因为用户需要输入两个字符串和两个数字(为了简单起见,我将其保持为双精度) 所以我使用了if语句:
if (unitHeight == "'"){
cin >> height2;
cin >> unitHeight2;
}
现在唯一存在的问题是我需要制作它以便当用户输入x'时(x是任何数字) 该计划不要求任何进一步的输入。 这可能是显而易见的,我可能只需退后一步,但我已经考虑了一段时间,我个人无法弄明白
感谢任何帮助。
答案 0 :(得分:2)
做什么取决于高度之后可能出现的其他输入(如果有的话),以及你想如何处理错误,但是为了让你开始:
int height2 = 0;
if (unitHeight == "'" && cin >> height2)
{
if (!(cin >> unitHeight2))
{
std::cerr << "hey, " << height2 << " what? give me units baby!\n";
exit(EXIT_FAILURE);
}
// if we get here, then we have height2 and unitHeight2 to work with...
...
}
else if (cin.eof())
{
// might have hit EOF without inches, that could be legal - depends on your program
...
}
else
{
// saw some non-numeric input when expecting height2 - is that ok?
...
}
自您发布以来,您添加了一条评论,说明您特意将此输入放在一行,之后用户可以按Enter键。要解决此问题,请使用std::string line; if (getline(std::cin, line)) { std::istringstream iss(line); >>above code goes here<< } else { ...couldn't read a line of input...}
。
另外,你说:
用户需要能够输入一个数字,然后输入一个测量单位。这可以是英尺/英寸,米或厘米。我得到了所有这些工作
......我希望如此,但请注意,支持例如,这有点棘手5 {11“和180厘米,cin >> height1 >> unitHeight1
,当unitHeight1
是std::string
时,将显示为”'11“。如果您unitHeight1
为char
,那么它往往只读取“cm”中的“c”,因此这两种符号都不适用。你最好读一个字符然后用它来决定是否读另一个......
答案 1 :(得分:0)
你可以这样做:
string height;
cin >> height;
for(int i = 0; i < height.size(); i++) {
if(height[i] == "'"[0]) {
cout << "It's ok!" << endl;
break;
}
}
答案 2 :(得分:0)
一次读取stdin一行。处理每一行。如果一行包含第二个数字(表示高度)和第二个字符串(表示单位),则表示您具有英尺+英寸规格。否则,你只有一个号码和一个单位。
const int maxLength = 200;
while (true)
{
char line[maxLength+1];
std::cin.getline(line, maxLength);
if ( !cin.good() )
{
break;
}
std::istringstream str(line);
double height1;
std::string unit1;
double height2;
std::string unit2;
bool secondHeightFound = false;
str >> height1 >> unit1 >> height2;
if ( str.good() )
{
str >> unit2;
secondHeightFound = true;
}
}