2013-05-03 53 views
0

當我讀取TestData.txt文件時,它給了我錯誤的輸出。我究竟做錯了什麼。我正在使用int數組,所以我可以在將數據保存到數組之後執行MergeSort。ifstream不會讀取所有整數

TestData.txt 
------------------- 
31791 564974 477059 269094 972335 
739154 206345 634644 227684 398536 
910177 507975 589785 67117 395140 
598829 372499 364165 450187 996527 
700285 263407 918021 661467 457544 
656297 846316 221731 240676 68287 
913 141702 845802 477617 109824 

{ 
int myArray[1000]; 
    int i; 
    //reading givin data 
    const char* filename= "TestData.txt"; 
    ifstream file(filename); 
    if(file.is_open()) 
    { 
     for(i = 0; i <=999; ++i) 
     { 
      file >> myArray[i];//storing data to array 


     } 
    } 
+1

什麼是錯的輸出和它從何而來? – 2013-05-03 14:41:49

+2

您正試圖從文件中讀取1000個條目。它包含那麼多數字嗎? – juanchopanza 2013-05-03 14:43:06

+0

您的輸入代碼也許正常,問題出在您的輸出代碼或代碼之間。 – john 2013-05-03 14:43:13

回答

-3

INT如果我沒看錯可以從-32768數據保持到32767 所以如果u有比這更大的值(你有,從源文件),你不會有結果你正在期待。

順便說一句,這將是很高興知道你得到什麼輸出。

+2

這些是* int *的最小*要求。大多數編譯器讓你在'int'中有更大的數字。 – john 2013-05-03 14:45:46

+0

正確但是......如果代碼似乎是合法的,那麼這是唯一可以考慮的事情... – Davide 2013-05-03 14:48:30

+1

錯誤很可能出現在他沒有發佈的代碼中。太常見了。 – john 2013-05-03 14:49:28

0

您正在閱讀文件中的1000個文件,其中包含的文件明顯少於1000個整數。 數組的第一個值必須是正確的,但在到達文件末尾後,操作符>>不會做任何準備。

例如這裏是寫的一種方式:

const char* filename= "TestData.txt"; 

std::vector<int> myArray; 
std::ifstream file(filename); 
if(file.is_open()) 
{ 
    int v; 
    while(file >> v) { 
     myArray.push_back(v); 
    } 
} 
+0

讀取文件的標準方法是:'while(file >> v){my_array.pushback(v);}'。或者你可以在Stack Overflow中搜索「C++ iterator ifstream vector」來使用迭代器爲你做這件事。 – 2013-05-03 15:08:00

1

需要檢查,如果你是ifstream的end of file,在這種情況下,你從了綁定的文件的獲取垃圾值。

經過一次修改,代碼就可以了。

變化:

for(i = 0; i <=999; ++i) 

到:

for(i = 0; i <=999 && !file.eof(); ++i)