簡體   English   中英

C ++ while循環,使用getline函數

[英]c++ while loops, using getline function

好吧,因為人們喜歡知道,這是家庭作業。

我正在編寫一個C ++程序將文本文件轉換為XML(這不是我需要的幫助),我遇到了這個問題。

我正在編寫一個while循環,以循環瀏覽txt文件(最多15個)中的公司,並且在每個組的末尾都用--END_MANAGER_DATA--標記。 我正在嘗試編寫一個while循環,該循環將遍歷該公司,並在到達--END_MANAGER_DATA--時完成循環。 以下是txt文件的示例

19936 WALKER KOLTON PORTLAND TN
HARMAN INTERNATIONAL INDUSTRIES INC
LUCENT TECHNOLOGIES INC
COMPUTER SCIENCES CORP
COMMUNICATIONS CORPORATION
--END_MANAGER_DATA--

這是我要使用的代碼.....

getline(inFile,company);
inFile.ignore();
while(company != "--END_MANAGER_DATA--"|| !inFile.eof())
{
    outputfile <<"\t\t\t <company> "<<company << "</company>"<<endl;
    getline(inFile,company);
    inFile.ignore();
}

這是行不通的。。。它只是停留在循環中。。。有人可以提供有關我可以走的路線的建議嗎? 我不是要你完成我的作業....只需要朝正確的方向輕推

讀取數據的慣用方式是將std::getline()放入while循環的測試條件中,如下所示:

std::string line;

while(std::getline(inFile, line) && line != "--END_MANAGER_DATA--")
{
    std::cout << "\t\t\t<company>" << line << "</company>" << '\n';
}

之所以可行,是因為只有在讀取行沒有錯誤的情況下,while才會繼續進行。 測試eof()無效,因為eof()直到讀取發生后才會發生,並且只有在不存在錯誤條件的情況下才會進行讀取。

在您的代碼中,您ignore()每行的第一個字符,這就是為什么我永遠無法匹配“ --END_MANAGER_DATA--”。

嘗試這個:

string company = "";
while(company.compare("--END_MANAGER_DATA--") != 0 && !inFile.eof()) {
    getline(inFile, company);
    outFile << "\t\t\t <company> "<< company << "</company>" << endl;
    inFile.ignore();
}

暫無
暫無

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

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