我有一个程序可以将文件中的信息加载到播放器类变量中。一切正常,除了最后一个变量playerdamage ..
<apex:page sidebar="false" showheader="false">
<head>
<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0; padding: 0 }
#map-canvas { width:100%;height:80%; }
.controls
</style>
<script src="https://maps.googleapis.com/maps/api/js?key=XXXXXX"></script>
<script>
var myCenter = new google.maps.LatLng(51.508742, -0.120850);
var circle;
function initialize() {
var mapProp = {
center: myCenter,
zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("googleMap"), mapProp);
var marker = new google.maps.Marker({
position: myCenter,
});
circle = new google.maps.Circle({
map: map,
radius: 100, // 10 miles in metres
fillColor: '#AA0000',
center: myCenter
});
marker.setMap(map);
}
function updateRadius(){
var rad = document.getElementById("value_rad").value;
circle.setRadius(parseFloat(rad));
}
google.maps.event.addDomListener(window, 'load', initialize);
console.log()
</script>
</head>
<body>
<div id="googleMap" style="width:100%;height:80%;"></div>
<input id="value_rad" />
<input id="radius" type="button" value="Search" onclick="updateRadius()"/>
</body>
</apex:page>
以下是文件内容(其中playerdamage是最后一个):
void Player::loadplayer(std::string name)
{
std::ifstream UserFile;
UserFile.open(name + ".txt");
if (UserFile.is_open())
{
while (UserFile.good())
{
getline(UserFile, playername, ';');
getline(UserFile, playerpass, ';');
UserFile >> playercash;
UserFile >> playercoords;
UserFile >> playerdamage;
}
}
UserFile.close();
}
但如果我登录并输入'stats':
除了损坏外,它们都正确加载。
答案 0 :(得分:3)
问题是你要用&#39;&#39;分隔值?其中&gt;&gt;运算符处理文件中的连续字符,并且不知道分号是您的分隔符。
解决问题的最简单,最快捷的方法是在每次调用后跳过文件中的单个字符。所以你会得到这样的代码:
UserFile >> playercash;
UserFile.ignore(1);
UserFile >> playercoords;
UserFile.ignore(1);
UserFile >> playerdamage;
这样所有的转换仍然由流本身处理 - 这对开发人员来说是好的,少编码。
另一种方法需要更多工作。基本上根据文档ifstream运算符&gt;&gt;按照(简称)
的方式工作从流中依次提取和解析字符 将它们解释为正确类型值的表示, 它存储为val的值。
示例中的变量属于未知类型,如果它们使用您自己的类型指定,那么您可能会重载ifstream 运算符&gt;&gt;
答案 1 :(得分:1)
如果只使用get line,会出现什么?
getline(UserFile, playername, ';');
getline(UserFile, playerpass, ';');
getline(UserFile, playercash, ';');
getline(UserFile, playercoords, ';');
getline(UserFile, playerdamage);
如果你想在getline调用后转换你的数据的整数或双值:
将字符串转换为int:
atoi( str.c_str() ) // C++ 98
std::stoi( str ) // C++ 11
将字符串转换为double:
atof( str.c_str() ) // C++ 98
std::stod( str ) // C++ 11
所以你得到这样的东西:
string playercoordsString;
getline(UserFile, playercoordsString, ';');
playercoords = std::stod(playercoordsString);