我试图确保我要问的不是重复的,因为这肯定是一个非常初学者的错误,但是我找不到类似的东西,但是如果有人引用了类似的帖子,那也很好无论如何,所以我正在尝试制作一个战舰游戏,该游戏从.csv文件读取船的位置,但是在放置船之前,它会通过文件并确保在文件中找到所有船。
文件中的数据格式如下:
Carrier,B2,H
Battleship,D4,V
Cruiser,G4,H
Submarine,G5,V
Destroyer,G8,H
在我的代码中导致我出现问题的部分是此块:
cout << "File successfully located!\n Making sure all ships are in file...\n";
while (shipPlacement.good()) {
getline(shipPlacement, shipType, ',');
cout << shipType << endl;
shipPlacement.ignore('\n');
}
我希望它只接受战舰类型,而忽略文件中的所有其他内容。正确读取了第一行,直到设置了定界符,它才停止读取,太棒了!然后我希望它忽略接下来的所有内容,直到下一行为止,所以我放置了shipPlacement.ignore('\ n'),从那一点起,它应该再次循环读入下一个发货内容,直到定界符,等等。我是否缺少某些内容这里?发生的事情只是将一半的船型作为输入。这是我得到的输出:
Making sure all ships are found in file...
Carrier
leship
ser
arine
royer
这可能是一个简单的修复程序,但是我看不到它前面的样子,希望能获得任何帮助或指导!
ignore
的第一个参数是要放弃的字符数,而不是定界符。您的\n
被解释为二进制数字10,这将导致接下来的10个字符被跳过(,B2,H⏎Batt
)。您应该改用shipPlacement.ignore(x, '\n')
,其中x
是您希望在换行符前看到的最多字符。