【发布时间】:2017-04-05 15:33:20
【问题描述】:
请看下面的代码:
std::string s;
while(std::getline(m_File,s))
{
std::cout<<"running\n";
std::string upper(s);
std::transform(upper.begin(),upper.end(),upper.begin(),toupper);
if(upper.find("*NODE") != std::string::npos)
{
std::cout<<"start reading nodes\n";
readnodes();
}
std::cout<<"\n open? "<<m_File.is_open()<<"\n";
}
我正在尝试从以下输入文件中提取数据。(INPUT FILE)
*NODE
1 ,1.0,2.0
2, 2.6,3.4
3, 3.4, 5.6
*NODE
4, 4, 5
5, 5, 6
但是当我运行它时,程序找到了 *NODE 的第一个实例并调用 readnode() 函数,但是 无法识别 *NODE 的第二个实例。 m_File 是同一类的 ifstream 对象,其中 readnode() 被定义为私有函数。
readnode():
void mesh::readnodes()
{
char c;
int id;
float x,y;
while(m_File>>id>>c>>x>>c>>y)
{
node temp(id,x,y);
m_nodes.push_back(temp);
// dummy string for reading rest of line.
std::string dummy;
std::getline(m_File,dummy);
}
}
【问题讨论】:
-
您的 while 循环不会在第二个节点处停止。您需要先读取每一行,然后与 NODE 进行比较,然后将其解析为数字序列。
标签: c++ file-io while-loop ifstream getline