我試圖通過實作與函式多載獲得類似處理結果的函式來獲得、、和的最小值。two integersreal numbersstringsinteger arrays
所以我寫這樣的代碼
#include <iostream>
#include <cstring>
using namespace std;
int GetMin(int a, int b);
double GetMin(double a, double b);
char* GetMin(char* a, char* b);
int GetMin(int* arr, int size);
int main()
{
int num1, num2;
double num3, num4;
char s1[30], s2[30];
int arr[10];
cout << "Enter two integers : ";
cin >> num1 >> num2;
cout << "The minimum value is " << GetMin(num1, num2) <<"\n";
cout << "Enter two real numbers : ";
cin >> num3 >> num4;
cout << "The minimum value is " << GetMin(num3, num4) <<"\n";
cout << "Enter two strings : ";
cin >> s1 >> s2;
cout << "The minimum value is " << GetMin(s1,s2) <<"\n";
cout << "Elements of an Array : ";
cin >> arr[10];
cout << "The minimum value is " << GetMin(arr[10], 10);
}
int GetMin(int a, int b)
{
if (a > b) return b;
else return a;
}
double GetMin(double a, double b)
{
if (a > b) return b;
else return a;
}
char* GetMin(char* a, char* b)
{
if (strcmp(a, b) < 0) return a;
}
int GetMin(int* arr, int size)
{
int min = arr[0];
for (int i = 1; i<size; i )
if (arr[i] < min)
min = arr[i];
return min;
}
這是期望的結果。
Enter two integers : 10 20
The minimum value is 10
Enter two real numbers : 56.84 120.26
The minimum value is 56.84
Enter two strings : orange apple
The minimum value is apple
Elements of an Array : 41 67 34 25 0 54 98 21 58 62
The minimum value is 0
我收到此錯誤訊息。
Run-Time Check Failure #2 - Stack around the variable 'arr' was corrupted.
uj5u.com熱心網友回復:
cin使用給整個陣列賦值是錯誤的。更常見的方法是使用fororwhile結構。我建議您閱讀此
警告 C6201 索引 '10' 超出有效索引范圍 '0' 到 '9' 對于可能堆疊分配的緩沖區 'arr'。
陣列 arr[10] 的索引應該是 arr[0]~arr[9]。關于 C6385 你應該閱讀這個檔案。
char* GetMin(char* a, char* b)
{
if (strcmp(a, b) < 0) return a;
}
最好不要將函式的引數作為回傳值。常用的方法是定義一個變數來存盤要回傳的引數。
uj5u.com熱心網友回復:
您有未定義的行為,這是由于嘗試讀入陣列以外的索引引起的:
cin >> arr[10];
我認為您正在嘗試讀取整個陣列,但這不可能。如果是(例如通過多載>>),它將使用arr而不是arr[10].
您可以通過多載來解決這個問題>>(盡管我懷疑這會不必要地復雜......)。或者通過回圈讀取。
uj5u.com熱心網友回復:
你不能像這樣輸入一個陣列
cin >> arr[10];
而是將單個值輸入到十元素陣列的第十一個元素中(導致未定義的行為)。
您需要使用回圈來逐個輸入每個元素:
for (unsigned i = 0; i < std::size(arr); i)
{
std::cout << "Enter input for element " << i 1 << ": ";
std::cin >> arr[i];
}
在不相關的說明中,我建議您了解有關標準容器的更多資訊,例如std::array和std::string。它們將使您作為 C 程式員的生活更加簡單。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/460627.html
