检查尺寸值及其含义的功能
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::array
或std::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_t
和 while
循环来防止输入另一个 0 作为替换值【参考方案2】:
因为您的原型需要 double
类型,而您传递的是 double arr1[]
..
更改原型:
void Check(double, string);
到:
void Check(double arr1[], string arr2[])
【讨论】:
以上是关于检查尺寸值及其含义的功能的主要内容,如果未能解决你的问题,请参考以下文章
按值比较迭代类型(IEnumerables及其亲属)(以检查相等性)