2015-04-03 127 views
0

我剛剛開始使用C++,並且正在研究codeval問題,所以如果有人這樣做,他們會認識到這個問題,因爲它是列表中的第一個。我需要打開一個具有3列空格分隔的整數值的文件。這是我的,在fizbuz.txt下。我需要從文件中獲取整數值並將其存儲起來,以便以後在程序中的其他地方使用。從文件中讀取整數數據

1 2 10 
3 5 15 
4 5 20 
2 8 12 
2 4 10 
3 6 18 
2 3 11 
8 9 10 
2 5 8 
4 9 25 

現在我可以打開文件了,我用getline()來讀取文件就好了,使用我的下面的代碼。但是,我不希望它們是字符串格式,我希望它們是整數。所以我環顧四周,每個人都基本上說相同的符號(文件>> int1 >> int2 ...)。我已經寫了一些代碼,就是我在幾個例子中看到的,並不像他們告訴我的那樣。

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 
int main() 
{ 
    string filename = "fizbuz.txt"; 
    string line; 
    int d1,d2,len; 
    int i =0; 
    int res1[10], res2[10], length[10]; 
    ifstream read (filename.c_str()); 
    if (read.is_open()) 
    { 
     // while(read>>d1>>d2>>len); 
     // { 
     //  res1[i] = d1; 
     //  res2[i] = d2; 
     //  length[i] = len; 
     //  i++; 
     // } 
     while (!read.eof()) 
     { 
      read>>d1>>d2>>len; 
      res1[i] = d1; 
      res2[i] = d2; 
      length[i] = len; 
     } 
     read.close(); 
    } 
    else 
    { 
     cout << "unable to open file\n"; 
    } 
    for (int j = 0; j < 10;j++) 
    { 
     cout<< res1[j] << " " << res2[j] << " " << length[j] << '\n'; 
    } 

} 

這兩個while循環都在底部的輸出函數中執行相同的操作。 fizbuz.txt的最後一行將返回到res1,res2和length的第一個元素,並且所有3的其餘元素都是psuedorandom值,可能來自任何使用該內存塊的程序。下面

4 9 25 
32767 32531 32767 
-1407116911 4195256 -1405052128 
32531 0 32531 
0 0 1 
0 1 0 
-1405052128 807 -1404914400 
32531 1 32531 
-1405054976 1 -1404915256 
32531 0 32531 
+0

你忘了'我++' – 2015-04-03 07:13:34

+0

我在這種情況下做了什麼? – NathanielJPerkins 2015-04-03 07:14:22

+0

@Thallazar你應該可能得到[好書](http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list)。 – molbdnilo 2015-04-03 07:15:54

回答

1

第一個版本應該只是你需要刪除;while線工作。

while (read >> d1 >> d2 >> len); 
          ^
+0

啊,我沒有意識到那裏,或者它甚至是重要的。爲什麼編譯器不會爲類似的東西吐出一個錯誤? – NathanielJPerkins 2015-04-03 07:21:32

+0

@Thallazar因爲這不是編譯錯誤。您有責任避免此類錯別字。 – herohuyongtao 2015-04-03 07:22:28

0

EX輸出試試這個

 while (!read.eof()) 
     { 
      read>>d1>>d2>>len; 
      res1[i] = d1; 
      res2[i] = d2; 
      length[i] = len; 
      i++; 
     } 
+0

是的,它適用於第二個函數,這是一個愚蠢的事情,忘記了我的但是,無論我在哪裏,他們都推薦了第一個符號,而且我並沒有忘記i ++,那麼爲什麼這不起作用呢? – NathanielJPerkins 2015-04-03 07:16:33