C ++英尺/英寸

时间:2014-01-17 04:42:01

标签: c++ inches

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

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

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

现在唯一存在的问题是我需要制作它以便当用户输入x'时(x是任何数字) 该计划不要求任何进一步的输入。 这可能是显而易见的,我可能只需退后一步,但我已经考虑了一段时间,我个人无法弄明白

感谢任何帮助。

3 个答案:

答案 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,当unitHeight1std::string时,将显示为”'11“。如果您unitHeight1char,那么它往往只读取“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;
   } 
}