2014-01-17 48 views
0

出於某種原因,我不斷收到範圍錯誤。我繼續得到多個範圍錯誤以及。未在範圍內聲明。多個錯誤

#include<iostream.h> 
#include<fstream.h> 
#include<assert.h> 

void ScanInFile(int ScanInValues[], int *total) 
{ 
    int i=0; 

    while(!cin>>&ScanInValues[i].eof()){ 
     i++; 
     *total = i; 
    } 

} 

void SortFile(int DataSetValues[], int TotalValues) 
{ 
    int i, j, temp; 

    for(i = 0; i < (TotalValues - 1); i++){ 
     for(j=0; j < TotalValues - i -1; j++){ 

     if(DataSetValues[j] > DataSetValues[j+1]){ 
     temp = DataSetValues[j]; 
     DataSetValues[j] = DataSetValues[j+1]; 
     DataSetValues[j+1] = temp; 
     } 
     } 
    } 

} 

int main(void) 
{ 
    int i, AmountOfValues=0; 
    int values[100]={ 0 }; 

ScanInFile(values, &AmountOfValues); 

SortFile(values, AmountOfValues); 

    for(i=0; i < AmountOfValues; i++){ 
    cout<<values[i]; 

    } 
    cout<<endl; 
    return 0; 
} 

出於某種原因,G ++不會編譯程序。我仍然因爲說endl和cout而出現錯誤,而且eof不在範圍之內。我哪裏錯了?

+1

哇!我不知道你在想什麼'!cin >>&ScanInValues [i] .eof()'確實不會做你想做的! o_0 – 0x499602D2

回答

0

這些天體內部std命名空間中聲明。您可以在它們之前加上std::std::cout << ...),或者在cpp文件的開頭添加using namespace std;

後您修正錯誤EOF,你也想檢查出你的陣列上綁定訪問,因爲你永遠不寫前檢查大小。

+0

我知道我忘了一些事情.....謝謝埃裏克! –

+0

剛編輯添加一些關於數組大小的東西。 –

+0

你是什麼意思檢查我的陣列上的債券訪問? –

0

除了Eric所說的之外,您的代碼中還有更多問題尚待指出。有一個在你的ScanInFile功能中,你寫了這個行:

while (!cin >> &ScanInValues[i].eof()) 

這條線將編譯,但它會做的東西比你所期望的有很大不同。我假設你在這條線上執行提取,但是想要在文件結束還沒有到達時執行這些提取。因爲流將通過隱式轉換爲布爾值來分析流狀態本身,所以不需要.eof()。這樣做是因爲:

while (cin >> ScanInValues[i]) 

我不想overcompilcate我的解釋,但我只是想強調,這是優先進行提取方式。使用!eof()作爲提取條件幾乎總是錯誤的方法。

+0

OH!在研究eof掃描文件直到文件結束時,多個人使用.eof(),就像在C中一樣。感謝您的幫助! –

+0

@ user3078582許多人使用'.eof()'作爲條件,但他們誤解了所述函數的可靠性。你應該在檢查流狀態之前執行提取*,否則會導致致命的問題。 – 0x499602D2

相關問題