2017-02-23 102 views
0
int boardDim(ifstream & inputFile, unsigned int x, unsigned int y) { 
    inputFile.open("test.txt"); 
    if (!(inputFile.is_open())) { 
     throw fileNotOpen; 
    } 
    else { 
     stringstream output; 
     string output1; 
     if (getline(inputFile, output1)) { 
      output << output1; 
      if (output >> x) { 
       if (output >> y) { 
        return success; 
       } 
       return secBoardVarErr; 
      } 
      return firstBoardVarErr; 
     } 
     return lineErr; 
    } 
    cout << x << endl; 
    cout << y << endl; 
} 

输入文件包含两行int s,“10 11”。C++ getline()函数未按预期工作

我返回lineErr。我似乎无法弄清楚为什么我的getline()函数返回false。

+2

请编辑您的问题包含一个[MCVE] – Slava

+1

确定该程序不是在一个旧的空test.txt文件存在一些意想不到的目录下运行?特别是从IDE运行时,当前工作目录可能不在您期望的位置。另外,你确定'lineErr'和'success'是不同的值吗?在返回成功之前移动'cout'语句是一个好主意,所以你可以看到它们(并确定解析是否正常工作)。 –

+0

如果您想使用从该函数以外的文件中读取的x和y的值,则应将它们作为参考传递。 –

回答

2

后,你写output流,你在流的末尾。为了能够再次读取数据,你需要寻求到流的开头:

output.seekg(0, ios_base::beg); 

BTW,output是您正在阅读流一个非常糟糕的名字。 :-)

+0

由于getline()函数返回false,因此它并没有被写入输出流。然而,我会实施你的解决方案。谢谢! 和哈哈你是对的,我在想这个流包含我将返回的最终值。 – Harrison

+0

FWIW,我通常做'getline' _then_在成功'if'范围创建一个'的std :: istringstream输入(线路);' - 通过提供施工期间的内容,则避免需要流中读取行。 –

+0

@哈里森:_“getline()函数返回false”_你怎么知道?无论如何,不​​,getline()永远不会返回false。 –