2010-05-08 81 views
1

我有一个文件,每行包含三个整数。当我读取这一行时,我使用一个stringstream来分隔这些值,但它只读取第一个值。另外两个读为零。C++ stringstream读取所有零的

ifstream inputstream(filename.c_str()); 
if(inputstream.is_open()){ 

    string line; 
    stringstream ss; 

    while(getline(inputstream, line)){ 
     //check line and extract elements 
     int id; 
     double income; 
     int members; 

     ss.clear(); 
     ss.str(line); 
     ss >> id >> income >> members;*emphasized text* 
    } 
} 

在上面的例子中,ID被正确提取,但收入和成员会被分配为零,而不是实际值。

编辑:解决

没关系。代码正常工作。错误在我的打印声明中。我有一个for循环每次都以相同的索引打印数组。

+0

你为什么要读第二个整数为双精度? – UncleZeiv 2010-05-08 21:05:54

+2

适合我,是您的文本文件格式正确吗? – UncleZeiv 2010-05-08 21:10:01

+0

该文件如何格式化?在每行中每个数字之间只有一堆空格 – user69514 2010-05-08 21:18:51

回答

1

为什么不直接从文件中读取?

while(inputstream) { 
    if(! inputstream >> id) ... 
    if(! inputstream >> income) ... 
    if(! inputstream >> members) ... 
} 
+0

这具有不正确检测格式不正确的输入的缺点。通过阅读单行,您可以保证每行都有预期的数据。 – 2010-05-08 21:11:48

+0

我同意,但如果语言要求用户用换行符分隔元组,它并不意味着解析器必须执行它。当然,如果语言要求_parser_在输入中强制换行,那么这是一个不同的故事。 @ user69514,你对此有何评论? – wilhelmtell 2010-05-08 21:22:35

+0

如果存在格式不正确的行,那么结果大致与我的代码不一致。例如,如果有三行,并且第一行只有一个值,那么解析器只会在列表行中失败。出现输入错误时,代码应如何运行? – wilhelmtell 2010-05-08 21:28:33