2014-04-17 15 views
0

我想寫一個程序,檢查矩形的尺寸是否大於零。在無效函數中檢查我嘗試使用數組來檢查值並使用字符串來顯示用戶錯誤的維度。我得到一個錯誤,它「不能轉換參數1‘雙[6]’到‘雙’。函數來檢查尺寸值,它是什麼

#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]; 
    } 
} 
+0

您正在傳遞包含3個元素的數組,但「Check」函數正在迭代4個元素。訪問數組邊界外的元素會導致[未定義的行爲](http://en.wikipedia.org/wiki/Undefined_behavior)。我建議使用'std :: array'或'std :: vector' **或**將數組的大小傳遞給'Check'。 –

回答

2

由於您的原型預計類型double,你傳遞一個double arr1[] ..

更改原型:

void Check(double, string); 

到:

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

你應該decla正確地重新設定功能。取而代之的

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"}; 

因爲據我瞭解你不會改變它。

+0

+1使用'size_t'和'while'循環來防止輸入另一個0作爲替換值 –