2013-01-14 123 views
-1

出於某種原因,這個代碼文件輸入不正確的C++

for (i = 0; i < 1024; i++) 
    mem[i] = 0; 

    //Read input file 
    instructions.open (fname.c_str(), fstream::in); 
    if (!instructions.is_open()) { 
    std::cout << "Error 404: file not found\n"; 
    exit (404); 
    } 

for (i = initial_pos; !instructions.eof(); i++) 
    instructions >> mem[i]; 

讀取該文件

1 
21 
1 
9 
11 
9 
16 
11 
9 
3 
60 
2 
0 
21 
0 
1 
11 
4 
0 
2 
2 
90 
0 

這樣:

1 
33 
1 
32 
11 
0 
28 
11 
1 
26 
11 
2 
24 
11 
3 
22 
41 
1 
1 
51 
8 
22 
1 
3 
21 
2 
0 
60 
34 
12 
5 
2 
2 
3 
90 
0 
0 
0 
1 
0 

有什麼特別的原因,爲什麼>>操作似乎正在向mem添加隨機數字?請注意,mem是一個初始化數組,所有數字在被讀取後都被打印出來。

+2

您正在使用'eof()',因此您的程序已損壞。今天還有十個其他問題有一個非常類似的問題。 –

+1

您的「錯誤404」可能不完全符合您的想法。 –

+0

錯誤屬於stderr。不要使用'std :: cout'。這就是爲什麼'std :: cerr'存在。 –

回答

2

在寫這篇文章的第一百次的風險,則您的代碼應該是:

std::ifstream infile(fname.c_str()); // "in" is implied 

if (!infile) { /* error, could not open file */ } 

for (int n; infile >> n;) 
{ 
    // we read the number n 
} 

如果你只是想整型的容器,甚至更好:

#include <vector> 
#include <iterator> 
#include <fstream> 

std::ifstream infile(fname.c_str()); 
std::istream_iterator<int> beg(infile), end(); 

std::vector<int> v(beg, end); 

// now "v" contains all the integers. 
+0

該問題預計我們會使用固定的整數數組作爲內存。載體會增加錯誤的機率。 –

0

固定它。我正在調用可執行文件錯誤。

它應該是:

[[[[輸入名稱]]]]

,但我打電話這樣說:

SIM test1.bin

所以模擬器將初始PC設置爲「test1.bin」,並將輸入設置爲默認輸入「input.bin」,以便我讀取錯誤的文件。

我想它總是歸結爲蹩腳的家庭作業分配發音。