我在課堂上遇到了一個程序問題,甚至老師也無法找到問題。我們正在做一個程序,要求用戶在停止時輸入兩倍,它掃描陣列並分開正面和負面,將它們放入不同的陣列。C++:當試圖用雙重填充動態向量時出現問題
我們注意到,當我們使用float的時候,程序會爲更多的數字工作,但是如果我們輸入的太多,並且如果我們在只有幾個數字後使用double的話,它仍然會出錯。我的意思是,程序做得很好,但是當它顯示結果時,數組中有一些奇怪的數字。這裏是使用雙精度的代碼:
#include <iostream>
using namespace std;
void filling(double *, int &);
void sortPositiveNegative(double *, double *, double *, int, int &, int &);
void display(const double *, int);
int main() {
double * vecteur = new double;
double * positive = new double;
double * negative = new double;
int counter = 0, counterPos = 0, counterNeg = 0;
cout << "Filling of the real number vector " << endl;
filling(vecteur, counter);
cout << endl << "Display of the real number vector " << endl;
display(vecteur, counter);
cout << endl << "Sort of the positive and negative in the real number vector: " << endl;
sortPositiveNegative(vecteur, positive, negative, counter, counterPos, counterNeg);
cout << endl << "Display of the positive real number : " << endl;
display(positive, counterPos);
cout << endl << "Display of the negative real number : " << endl;
display(negative, counterNeg);
system("PAUSE");
return 0;
}
void filling (double *vecteur, int &counter)
{
bool validation;
char choice = 'Y';
do
{
do
{
validation = true;
cout << "Please enter the value of case " << counter+1 << ": ";
cin >> vecteur[counter];
if(cin.fail())
{
cerr << "The number entered is not valid." << endl;
cin.clear();
validation = false;
}
while(cin.get() != '\n'){}
}while(!validation);
counter++;
do
{
validation = true;
cout <<"Do you wish to continue? (Y/N): ";
cin >> choice;
if(toupper(choice) != 'Y' && toupper(choice) != 'N')
{
cerr << "We don't understand your choice, please try again." << endl;
cin.clear();
validation = false;
}
while(cin.get() != '\n'){}
}while(!validation);
}
while(toupper(choice)=='Y');
}
void sortPositiveNegative(double *vecteur, double *positive, double *negative, int counter, int &counterPos, int &counterNeg)
{
int i = 0;
for(i; i<counter;i++)
{
if(vecteur[i] >= 0)
positive[counterPos++] = vecteur[i];
else
negative[counterNeg++] = vecteur[i];
}
}
void display (const double *vecteur, int counter)
{
for(int i = 0; i<counter;i++)
cout << vecteur[i]<<endl;
cout << endl;
}
我的老師認爲這可能是一個記憶問題,但我們不知道爲什麼它這樣做。
在此先感謝。
你使用什麼輸入會產生問題,它會產生什麼輸出? – Xymostech 2013-04-26 15:47:26
你只分配一個double而不是其中的一個數組。你也在泄漏他們。 – avakar 2013-04-26 15:49:13
這是OT,但我很驚訝你的老師看不到這麼簡單的事情。我希望(對於你和他教的其他所有學生)他那天的狀況很糟糕,這並不能反映他平時的C++技能...... – syam 2013-04-26 15:58:19