C++关于strcmp和读取文件

标签 c++

我在 main.cpp 中得到了一个代码

cout<<endl<<"Please enter filename: ";
cin.ignore();
getline(cin,fileName);
fin.open(fileName.c_str());
if(fin.is_open())
{

    while(fin.good())
    {
        fin.getline(line,20,',');

        if(!strcmp(line,"Map2D")) 
        {
            cout << "Map 2D" << endl;
        }
        else if(!strcmp(line,"Map3D")) 
        {
            cout << "Map 3D" << endl;
        }
        else if(!strcmp(line,"Dot2D")) 
        {
            cout << "Dot 2D" << endl;
        }
        else if(!strcmp(line,"Dot3D")) 
        {
            cout << "Dot 3D" << endl;
        }

    }
}

这是我的文本文件

Map2D, [3, 8]
Dot3D, [7, 12, 3], [-9, 13, 68]
Map3D, [1, 3, 8]
Dot2D, [5, 7], [3, 8]
Map2D, [6, 2]

但问题是当我尝试编译和运行时,它会保留打印 map2D 而 Map3d 甚至不会被输出

我在strcmp上的逻辑有问题吗

更新:

我改为 if(strstr(line,"Map2D") 及其工作。

感谢所有帮助。

最佳答案

您的 getline 不是读取行,而是直到遇到下一个“,”。

即,您遍历:

Map2D
 [3
 8]\nDot3D
 [7
 12
 3]
 [-9
 13
 68]\nMap3D
...

应该很容易理解为什么您永远不会点击等于“Map3D”的标记。

顺便说一句,你粘贴的代码不是你编译的代码。 C++ 中没有“elseif”这样的东西。

关于C++关于strcmp和读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13376830/

相关文章:

c++ - QT中的非初始化指针

c++ - 给定字符串中每个字符出现的次数

c++ - “double& Point::operator[](unsigned int)”在此上下文中不可访问

javascript - 如何使用 V8 从 C++ 访问和调用 Javascript 对象属性和方法?

c++ - 函数参数推送顺序

c++ - 模板特化或函数重载

c++ - 存储设置的最佳实践

c++ - C++ 中错误的输出顺序

c++ - 如何知道两个 c++ 断点之间的代码汇编行的大小?

c++ - C++ 中字符串 vector 的 reserve() 函数