我有一個包含以下數據的文本文件。從文件中讀取空格分隔的數字直到換行符
第一行是這樣的:
5 4 3 2 1
第二行是這樣的:
1 2 3 4 5
我想以一次讀取一行的數據,因爲我的第一個鏈接-list對象將使用第一行中的數據,而我的第二個鏈接列表對象將使用第二行中的數據。我所能想到的最好的功能如下:
void polynomial::allocate_poly(std::ifstream& in, const char* file, const char* number)
{
in.open(file);
std::string str;
char b;
int m = 0;
for(int i = 0; !in.eof(); ++i)
{
in >> b;
m = b - '0';
a.insert(m);
}
這種方法存在一些問題。我在我的for循環中嘗試了不同的二元運算符,如b == '\n'
,並且當b是換行符時,它們都不會觸發。
也以這種方式分配文件中的數字,它看起來像 5 5 4 3 2 1 1 2 3 4 5
,所以它似乎是複製一個額外的5某處,我不知道這是否eof位。
我也試圖使用getline函數,但由於某種原因,它似乎只複製第一個整數,然後轉儲文件的其餘部分。我當然知道我沒有正確使用它,但是我可以找到的所有示例都是用於輸入文件名,例如cin.getline
,我希望能夠在運行程序時將我的文件名作爲命令行參數傳遞。
我的問題是如何分配第一行上的數字直到換行符char,然後將ifstream in
變量傳遞給另一個對象以分配第二行?謝謝你的幫助。
雖然這比我以前好了很多,現在我不再有重複5在開始時,它遇到'\ n'字符時仍然沒有停止。 –
@NicYoung:每一行將在外循環的每一輪中分別讀取。你只需要跟蹤循環迭代。或者,如果你確定有兩行,那麼不要使用'while'循環,而應該說'if(std :: getline(infile,line))'兩次('else'塊對應於錯誤條件)。 –
這正是我需要的!非常感謝你。 –