1

请看下面的代码

#include <iostream>
#include <iomanip>

using namespace std;

double hypontenuse(double,double);


int main()
{
    double side1 = 0;
    double side2 = 0;

    cout << "Enter side1 (-1 to exit)" << endl;
    cin >> side1;

    while(true)
    {

        if(side1==-1)
        {
            break;
        }

        cout << "Enter side2" << endl;
        cin >> side2;

        double result = hypontenuse(side1,side2);

        cout << "The Hypontenuse of the Right Triangle is: " << setprecision(2) << fixed << result << endl;


        cout << "Enter side1 (-1 to exit)" << endl;
        cin >> side1;
    }
} 

double hypontenuse(double side1, double side2)
{
    double result = (side1*side1)+(side2*side2);

    return result;
}

我是 C++ 新手。在这段代码中,如果我输入了无效的输入(空格、制表符、字母等),这段代码会突然变成一个无限循环。我需要忽略这些无效输入,显示一条消息,然后回到起始位置。我怎样才能做到这一点?请帮忙!

4

2 回答 2

1

您总是需要检查您的输入是否成功。通常,只需将流转换为布尔值即可:

if (std::cin >> value) {
    process(value);
else {
    // recover from the error
}

从错误输入中恢复至少包括两个部分:

  1. 将流设置回它可以执行任何操作的状态,例如,使用std::cin.clear().
  2. 摆脱任何有问题的输入。如何做到这一点完全取决于您的需求。例如,您可能可以忽略单个字符或直到行尾的所有内容。

忽略字符的代码类似于以下代码之一:

std::cin.ignore(); // ignores one character
std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // ignore until end of line
于 2012-10-07T17:47:56.760 回答
0

就个人而言,我的建议是使用良好的旧 C“fgets()”和“sscanf()”。

但是,请查看此链接:

它执行以下操作:

1)用于std::getline(std::cin, str)读取您的原​​始输入(类似于“fgets”)

2) 用于std::ws吃掉多余的空白(如制表符、字符和换行符)

不幸的是,它无助于验证输入( sscanf() 会在一个语句中为您做)。

'希望有帮助

==================================================== =============

问:你能编辑我的代码吗?有点难以理解 :( – Sepala

答:够公平的。开始:

#include <stdio.h>

double 
hypontenuse(double side1, double side2)
{
    return (side1*side1)+(side2*side2);
}


int 
main(int argc, char *argv[])
{
    double side1 = 0;
    double side2 = 0;
    char buff[80];

    while(true)
    {
      printf ("Enter side1 and side2 (-1 to exit): ");
      fgets (buff, sizeof (buff), stdin);
      int iret = sscanf (buff, "%lf %lf", &side1, &side2);
      if (side1 == -1)
        break;
      if (iret != 2)
        continue;

      double result = hypontenuse(side1,side2);
      printf ("The Hypontenuse of the Right Triangle is: %.02lf\n", result);
    }
    printf ("Done.\n");
    return 0;
} 
于 2012-10-07T17:47:44.617 回答