我在 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/