繁体   English   中英

getline函数仅读取第一行

[英]The getline function only reads the first line

这是我的程序。 应该从输入文件中读取每一行,并以整洁的格式显示在控制台上。 但是,getline仅读取第一行。

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <sstream>
using namespace std;

int main(int argc, char *argv[]){
    ifstream inFile;
    string state, quantityPurchased, pricePerItem, itemName;    
    inFile.open("lab11.txt");
    if (inFile.fail()){
        perror ("Unable to open input file for reading");
        return 1;
    }
    string line;
    istringstream buffer;
    while(getline(inFile, line)){
        buffer.str(line);
        buffer >> state >> quantityPurchased >> pricePerItem >> itemName;

        cout << left << setw(2) << state << " ";
        cout << setw(15) << itemName << " ";
        cout << right << setw(3) << quantityPurchased << " ";
        cout << setw(6) << pricePerItem << endl;
    }
}

输入文件如下所示:

TX 15 1.12 Tissue
TX 1 7.82 Medication
TX 5 13.15 Razors
WY 2 1.13 Food
WY 3 3.71 Dinnerware

但是它显示如下(在组织之前):

TX 15 1.12 Tissue
TX 15 1.12 Tissue
TX 15 1.12 Tissue
TX 15 1.12 Tissue
TX 15 1.12 Tissue

在第二个循环之后,缓冲区无法提取,因为您尚未清除状态位。 做这个:

buffer.clear()
buffer.str(line);

您可以通过将一些输出添加到代码中来查看此内容:

std::cout << "EOF: " << buffer.eof() << std::endl;

在第一次通过循环后,流到达输入字符串的末尾,并且EOF位将被置位。 在下一个循环开始时重置字符串不会重置此位,因此仍将其设置。 当您尝试第二次提取时,流会认为它已经在文件末尾,并且认为它没有什么要读取,因此它很早。 清除状态位可解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM