【问题标题】:Function to check dimension value and what it is检查尺寸值及其含义的功能
【发布时间】:2014-04-17 22:21:30
【问题描述】:

我正在尝试编写一个程序来检查矩形的尺寸是否大于零。在 void 函数检查中,我尝试使用数组来检查值并使用字符串向用户显示错误的维度。我收到一个错误,它“无法将参数 1 从 'double[6]' 转换为 'double'。

#include <iostream>
#include <string>

using namespace std;

void Check(double, string);

int main()
{
    const int size = 3;
    double DimArray[size];
    string MyArray[size] = { "Height", "Length", "Width"};

    cout << "Enter the height, length and width of rectangle: ";
    cin >> DimArray[0] >> DimArray[1] >> DimArray[2];

    Check(DimArray, MyArray);

    return 0;
}

void Check(double arr1[], string arr2[])
{
    int i;
    for (i = 0; i < 4; i++)
    {
        if (arr1[i] <= 0)
          cout << "Your entered " << arr2[i] << "is less than zero!";
        cout << "Please enter a valid number --> ";
        cin >> arr1[i];
    }
}

【问题讨论】:

  • 您正在传递包含 3 个元素的数组,但 Check 函数正在迭代 4 个元素。访问数组边界之外的元素会产生undefined behavior。我建议使用std::arraystd::vector 将数组的大小传递给Check

标签: c++ arrays string function


【解决方案1】:

你应该正确地声明函数。而不是

void Check(double, string);

应该有

void Check( double[], const std::string[], size_t );

也代替函数体中的循环

for (i = 0; i < 4; i++)

应该有

for (i = 0; i < 3; i++)

函数可以定义为

void Check( double arr1[], const std::string arr2[], size_t n )
{
   for ( size_t i = 0; i < n; i++ )
   {
       while ( arr1[i] <= 0 )
       {
            std::cout << "Your entered " << arr2[i] << "is not positive!\n";
            std::cout << "Please enter a valid number --> ";
            std::cin >> arr1[i];
       }
   }
}

或者如果你要定义文件范围的常量

const size_t SIZE = 3;

那么函数定义(以及相应的声明)可以被简化

void Check( double arr1[], const std::string arr2[] )
{
   for ( size_t i = 0; i < SIZE; i++ )
   {
       while ( arr1[i] <= 0 )
       {
            std::cout << "Your entered " << arr2[i] << "is not positive!\n";
            std::cout << "Please enter a valid number --> ";
            std::cin >> arr1[i];
       }
   }
}

除了 std::string(s) 的数组,最好定义一个const char * 的数组

const char * MyArray[size] = { "Height", "Length", "Width"};

因为据我所知,你不会改变它。

【讨论】:

  • +1 用于使用 size_twhile 循环来防止输入另一个 0 作为替换值
【解决方案2】:

因为您的原型需要 double 类型,而您传递的是 double arr1[]..

更改原型:

void Check(double, string);

到:

void Check(double arr1[], string arr2[])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 1970-01-01
    • 2011-07-08
    • 2011-06-17
    • 1970-01-01
    相关资源
    最近更新 更多