使用 .ignore('\n') 并且后面的 Getline 函数只从文件中获取一半的输入
Used .ignore('\n') and the Getline function that follows is only taking half of the input from file
我试图确保我问的不是重复的,因为这一定是一个非常初学者的错误,但我找不到类似的东西,但如果有人提到了类似的东西 post无论如何,那也很棒所以我正在尝试制作一个战舰游戏,该游戏从 .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
是您期望在换行符之前看到的最多字符。
我试图确保我问的不是重复的,因为这一定是一个非常初学者的错误,但我找不到类似的东西,但如果有人提到了类似的东西 post无论如何,那也很棒所以我正在尝试制作一个战舰游戏,该游戏从 .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
是您期望在换行符之前看到的最多字符。