2013-12-23 70 views
4

我想在C++中做一個簡單的初學者任務。我有一個包含 「John Smith 31」行的文本文件。而已。我想用ifstream變量讀入這些數據。但我想將名稱「John Smith」讀入一個字符串變量,然後將數字「31」讀入一個單獨的int變量。在C++中使用getline()和文件輸入

我試圖使用getline函數,如下所示:

ifstream inFile; 
string name; 
int age; 

inFile.open("file.txt"); 

getline(inFile, name); 
inFile >> age; 

cout << name << endl; 
cout << age << endl; 

inFile.close();  

與此問題是,它輸出整行「約翰·史密斯31」。有沒有一種方法可以告訴getline函數在獲取名稱後停止,然後用「重新啓動」來檢索該數字?沒有操縱輸入文件,那是?

+1

如果您不想讀取一行,請不要調用getline。這真的很簡單。 –

回答

6

getline,因爲它的名稱狀態,讀一整行,或至少直到可以指定的分隔符。

所以答案是「否」,getline與您的需求不符。

但你可以這樣做:

inFile >> first_name >> last_name >> age; 
name = first_name + " " + last_name; 
+0

'+'操作符在C++中的字符串連接工作嗎? – Zeeshan

+2

[是的,它確實](http://en.cppreference.com/w/cpp/string/basic_string/operator%2B) – Johan

+0

我的意思是,如果它以這種方式工作。我在某處讀過,我們需要將字符串指定爲** std :: string x; **,以使用+來進行連接。否則,編譯器會假定您正在嘗試添加字符指針。那是禮拜儀式?或者它只是按照提到的方式工作?只是想爲自己說清楚。謝謝 – Zeeshan

2

你應該做的是:

getline(name, sizeofname, '\n'); 
strtok(name, " "); 

這會給你的 「joht」 在 然後得到一個令牌,

temp = strtok(NULL, " "); 

temp將在其中獲得「史密斯」。那麼你應該使用字符串連接來追加名稱末尾的temp。如:

strcat(name, temp); 

(您可能還會先追加空格,以獲得兩者之間的空間)。

1
ifstream inFile; 
string name, temp; 
int age; 

inFile.open("file.txt"); 

getline(inFile, name, ' '); // use ' ' as separator, default is '/n'. Now name is "John". 
getline(inFile, temp, ' '); // Now temp is "Smith" 
name.append(1,' '); 
name += temp; 
inFile >> age; 

cout << name << endl; 
cout << age << endl; 

inFile.close();