我有一個問題,我基本上感到困惑。首先,我有兩個全局數組 - trustArray []和fashionArray []。下面是填充trustArray功能:atof改變全局數組值
void getTrust()
{
string line;
int reachedTrust=0;
int numberOfTrustsRecorded=0;
ifstream myfile ("BuyingJeans.Hw5 (1).csv");
if (myfile.is_open())
{
while (myfile.good())
{
getline (myfile,line,',');
//int found=line.find("Like-Purchase");
if (line=="Trust-Like"){
reachedTrust=1;
getline (myfile,line,',');
}
if(reachedTrust==1){
if(numberOfTrustsRecorded <6){
double testValue = atof(line.c_str());
trustArray[numberOfTrustsRecorded] = testValue;
numberOfTrustsRecorded++;
}
}
}
myfile.close();
}
else
cout << "Unable to open file";
}
出於某種原因,在此功能的atof()
正在改變兩個fashionArray []中的值的。如果我將atof()
改爲atoi()
,則問題不再發生。下面是填充正在更改陣列(fashionArray [])的方法:
void getFashion(){
string line;
int reachedFashion=0;
int numberOfFashionsRecorded=0;
ifstream myfile ("BuyingJeans.Hw5 (1).csv");
if (myfile.is_open())
{
while (myfile.good())
{
getline (myfile,line,',');
if (line=="Like-Fash -->"){
reachedFashion=1;
getline (myfile,line,',');
//cout<<line<<endl;
//getchar();
}
if(reachedFashion==1){
if(numberOfFashionsRecorded <6){
fashionArray[numberOfFashionsRecorded] = atoi(line.c_str());
numberOfFashionsRecorded++;
}
}
}
myfile.close();
}
else cout << "Unable to open file";
}
這裏是調用這兩種方法的主要方法:
int main() {
getFashion();
getTrust();
for(int x=0; x<6;x++)
cout<<fashionArray[x]<<endl;
getchar();
return 0;
}
第一fashionArray的兩個值最終變成了一些荒謬的大負值和正值。一個有趣的事情是,如果我顛倒main()方法中調用這兩個方法的順序,則問題不再發生。任何人都有任何想法可能會造成這種情況?
trustArray聲明和分配在哪裏? – DRVic 2012-04-06 01:37:17
可怕的大負值和正值聽起來就像'atof()'無法轉換C字符串(值超出範圍,因此+/- HUGE_VAL被返回)... – user268396 2012-04-06 01:46:49
trustArray是全局聲明和分配的,與數組相同正在改變。我同意超出範圍的解釋,但我仍然困惑,爲什麼這會導致不同數組的值被更改。 – 2012-04-06 02:39:32