检查尺寸值及其含义的功能

Posted

技术标签:

【中文标题】检查尺寸值及其含义的功能【英文标题】: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 【参考方案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[])

【讨论】:

以上是关于检查尺寸值及其含义的功能的主要内容,如果未能解决你的问题,请参考以下文章

如何使用python检查目录中所有图像的尺寸?

按值比较迭代类型(IEnumerables及其亲属)(以检查相等性)

Web书写Test Case时需要考虑的检查点

Pyspark - 如何检查两条记录中哪一条具有最新日期及其列值?

检查雪花中的表架构更改

软件架构检查项