C ++区域的矩形错误检查功能

时间:2015-10-25 01:38:53

标签: error-handling

下面是我对程序的代码,在该程序中要求用户输入长度和宽度,然后计算面积并显示长度,宽度和面积。

我正在尝试在用户输入的代码底部合并错误检查功能,这样如果用户键入的内容不是数字,则会显示Invalid input. Try again:

我查看了几个论坛帖子并且已经在这里工作了几个小时,所以我很感激任何帮助我们尝试使错误检查功能正常工作。

#include <iostream>
#include <cstdlib>
#include <limits>
using namespace std;

// Write the prototypes for the getLength,
// getWidth, getArea, and displayData
// functions here.

double getLength();
double getWidth();
double getArea(double, double);
void displayData(double, double, double);
double error(double);

int main()
{
   double len,    // The rectangle's length
          wid,     // The rectangle's width
          ar;      // The rectangle's area

   // Get the rectangle's length.
   len = getLength();

   // Get the rectangle's width.
   wid = getWidth();

   // Get the rectangle's area.
   ar = getArea(len, wid);

   // Display the rectangle's data.
   displayData(len, wid, ar);

   return 0;
}

double getLength ()
{

    double length;
    cout << "Please enter the length of the rectangle:" << endl;
    cin >> length;
    error (length);
    return length;

}

double getWidth ()
{

    double width;
    cout << "Please enter the width of the rectangle:" << endl;
    cin >> width;
    error (width);
    return width;

}

double getArea (double length, double width)
{

    double area;
    area = length*width;
    return area;

}

void displayData(double length, double width, double area)
{

    cout << "The length is: " << length << endl;
    cout << "The width is: " << width << endl;
    cout << "The area is: " << area << endl;

}

double error(double x)
{

   while(!(cin>>x))

   {
       cin.clear();
       cin.ignore(numeric_limits<streamsize>::max(), '\n');

       cout << "Invalid input. Try again: " << endl;
       cin>>x;

       return x;
    }
   cout << "You entered: " << x << endl;

   return x;

}

1 个答案:

答案 0 :(得分:1)

看起来像一个控制台应用,所以你可能正在使用scanf()?在这种情况下,您应该检查scanf()的返回值,以查看扫描和格式化了多少项: int result = scanf(&#34;%f&#34;,&amp; length);

如果结果为零,则用户输入的值不能解释为double。你不知道为什么它是无效的,你不能确定用户是否在双重后键入垃圾,但它总比没有好。

如果您读取字符串然后自己解析它或查找将为您解析它的第三方代码,您可以进行更多验证。