1

这是一个与 C++ 相关的问题。我需要制作一个读取用户体重/身高的程序。这一切都很好,花花公子,但我遇到了一个问题。

用户需要能够输入一个数字,然后是一个测量单位。这可以以英尺/英寸、米或厘米为单位。我已经完成了所有这些工作,但用户还应该能够编写诸如 5' 之类的东西,并且英寸是可选的。这是我遇到的问题:我有两个用于用户输入的变量,一个双精度(高度)和一个字符串(单位高度)。这适用于 m 和 cm,但对于英尺/英寸,我需要再添加两个,因为用户需要输入两个字符串和两个数字(为简单起见,我将其保留为双精度数)所以我使用了 if 语句:

if (unitHeight == "'"){
    cin >> height2;
    cin >> unitHeight2;
}

现在唯一存在的问题是我需要这样做,以便当用户输入 x'(x 是任何数字)时,程序不会要求任何进一步的输入。这可能很明显,我可能只需要退后一步,但我已经考虑了一段时间,我个人无法弄清楚

任何帮助表示赞赏。

4

3 回答 3

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" 和 180cm 时,它有点棘手,因为cin >> height1 >> unitHeight1,当unitHeight1是 a时std::string,将读取 "'11"。如果你制作unitHeight1achar那么它往往只会读取 " c" 来自 "cm",所以这两种表示法都不适用。你最好先读一个字符,然后用它来决定是否读另一个....

于 2014-01-17T04:53:44.263 回答
0

一次读取一行标准输入。处理每一行。如果一行包含第二个数字(高度)和第二个字符串(单位),那么你有英尺+英寸规范。否则,您只有一个数字和一个单位。

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;
   } 
}
于 2014-01-17T05:37:48.753 回答
0

你可以这样做:

string height;
cin >> height;

for(int i = 0; i < height.size(); i++) {
    if(height[i] == "'"[0]) {
        cout << "It's ok!" << endl;
        break;
    }
}
于 2014-01-17T05:01:17.880 回答