Used .ignore('\ n'),后面的Getline函数仅从文件中获取一半的输入

问题描述 投票:0回答:1

我试图确保我要问的不是重复的,因为这肯定是一个非常初学者的错误,但是我找不到类似的东西,但是如果有人引用了类似的帖子,那也很好无论如何,所以我正在尝试制作一个战舰游戏,该游戏从.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

这可能是一个简单的修复程序,但是我看不到它前面的样子,希望能获得任何帮助或指导!

c++ c++11 clion getline
1个回答
0
投票

ignore的第一个参数是要放弃的字符数,而不是定界符。您的\n被解释为二进制数字10,这将导致接下来的10个字符被跳过(,B2,H⏎Batt)。您应该改用shipPlacement.ignore(x, '\n'),其中x是您希望在换行符前看到的最多字符。

© www.soinside.com 2019 - 2024. All rights reserved.