使用getline从文件中读取永远不会超过第一行 我试图读取C++中的一个Objo文件的内容,我正在努力处理它。我已经用C++做了两年的事情,所以我忘记了很多,但是我精通java。

使用getline从文件中读取永远不会超过第一行 我试图读取C++中的一个Objo文件的内容,我正在努力处理它。我已经用C++做了两年的事情,所以我忘记了很多,但是我精通java。,c++,file,ifstream,stringstream,C++,File,Ifstream,Stringstream,我正在尝试读取一个包含如下内容的obj文件 # This file uses centimeters as units for non-parametric coordinates. mtllib crayon.mtl g default v 0.927930 -17.363054 -0.279038 ... vt 0.648603 0.107966 ... etc 然而,它似乎无法读懂第一行的内容。以下是我迄今为止的代码: void TextureMapper::read_file(str

我正在尝试读取一个包含如下内容的obj文件

# This file uses centimeters as units for non-parametric coordinates.

mtllib crayon.mtl
g default
v 0.927930 -17.363054 -0.279038
...
vt 0.648603 0.107966
... etc
然而,它似乎无法读懂第一行的内容。以下是我迄今为止的代码:

void TextureMapper::read_file(string file_name)
{
    ifstream file;
    file.open(file_name);
    if (file.is_open())
    {
        string line;
        while (getline(file, line))
        {
            std::stringstream ss(line);
            string token;
            ss >> token;
            switch (get_obj_type(token))
            {
                case GEOMETRIC_VERTEX:
                    break;
                case TEXTURE_VERTEX:
                    break;
                case VERTEX_NORMAL:
                    break;
                case GROUP_NAME:
                    break;
                case SMOOTHING_GROUP:
                    break;
                case FACE:
                    break;
                case MATERIAL_NAME:
                    break;
                case MATERIAL_LIBRARY:
                    break;
                case COMMENT:
                    break;
                case BLANK:
                    break;
            }
        }
        file.close();
    }
    else
        std::cerr << "Couldn't open " << file_name << " for reading\n";
}
void TextureMapper::读取文件(字符串文件名)
{
ifstream文件;
打开(文件名);
if(file.is_open())
{
弦线;
while(getline(文件,行))
{
std::stringstream ss(线路);
字符串标记;
ss>>令牌;
开关(获取对象类型(令牌))
{
案例几何_顶点:
打破
案例纹理\u顶点:
打破
案例顶点_法线:
打破
案例组名称:
打破
案例组:
打破
案面:
打破
案例材料名称:
打破
案例材料库:
打破
案例评论:
打破
空格:
打破
}
}
file.close();
}
其他的

std::cerr能否将其封装在try&catch中并检查异常?我们还可以查看get_obj_type()函数的代码吗?诊断此问题的一种方法是添加try/catch块。这类似于
try{BODY OF MAIN go HERE}catch(std::exception ex){ STR::CURR,我已经更新了这个问题,并且不再有例外。谢谢。使用“默认”的情况能够在您的交换机中进行未知的情况。这将考虑到空白行的情况。显然我必须注释Switter语句来运行它。我为每一行获得正确的第一个令牌。也许您是。应该添加一个函数来读取并调试代码行(const std::string&line)。至少可以很容易地看到不同的代码行。您可以将其封装在try&catch中并检查异常吗?我们还可以查看get_obj_type()的代码吗函数?诊断此问题的一种方法是添加一个try/catch块。这类似于
try{BODY OF MAIN GOES HERE}catch(std::exception ex){ STR::CURR,我已经更新了这个问题,并且不再有例外。谢谢。使用“默认”的情况能够在您的交换机中进行未知的情况。这将考虑到空白行的情况。显然我必须注释Switter语句来运行它。我为每一行获得正确的第一个令牌。也许您是。应该添加一个函数来读取并调试代码行(const std::string&line)。至少可以很容易地看到不同的代码行。