簡體   English   中英

在 C++ 中將 getline() 與文件輸入一起使用

[英]Using getline() with file input in C++

我正在嘗試用 C++ 做一個簡單的初學者任務。 我有一個包含“John Smith 31”行的文本文件。 而已。 我想使用 ifstream 變量讀入此數據。 但我想將名稱“John Smith”讀入一個字符串變量,然后將數字“31”讀入一個單獨的 int 變量。

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

ifstream inFile;
string name;
int age;

inFile.open("file.txt");

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

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

inFile.close();    

問題在於它輸出整行“John Smith 31”。 有沒有辦法告訴 getline 函數在獲得名稱后停止,然后“重新啟動”以檢索號碼? 不操作輸入文件,那是什么?

getline ,顧名思義,讀取整行,或至少讀取到可以指定的分隔符。

所以答案是“不”, getline不符合您的需要。

但是您可以執行以下操作:

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

你應該這樣做:

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

這將為您提供名稱中的“joht”,然后獲取下一個令牌,

temp = strtok(NULL, " ");

temp將在其中添加“史密斯”。 那么您應該使用字符串連接在名稱末尾附加臨時值。 如:

strcat(name, temp);

(您也可以先添加空格,以獲得中間的空格)。

ifstream inFile;
string name, temp;
int age;

inFile.open("file.txt");

getline(inFile, name, ' '); // use ' ' as separator, default is '\n' (newline). 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();    

您可以使用此代碼從文件中使用 getline。 此代碼將從文件中提取一整行。 然后你可以使用 while 循環來遍歷所有行 while (ins);

 ifstream ins(filename);
string s;
std::getline (ins,s);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM