老师您好,我想请问一下后续拆分字符串并用for循环输出vstcode每行信息的时候,日志crtsrrfdata2.cpp每一行中文都变成了乱码一样的文字,这个怎么解决?再在这之前单独显示一整行没切分之前的数据是正常的。
struct st_stcode
{
char provname[31]; //省
char obtid[11]; //站号
char obtname[31]; //站名
double lat; //纬度
double lon; //经度
double height; //海拔高
};
//存放全国气象站点参数文件
vector<struct st_stcode> vstcode;
//把站点参数文件加载到vstcode容器中
bool LoadSTCode(const char *inifile);
CLogFile logfile;
int main(int argc, char *argv[]){
//inifile outpath logfile
if(argc != 4){
printf("Using: ./crtsurfdata2 inifile outpath\n");
printf("Example: /project/idc1/bin/crtsurfdata2 /project/idc1/ini/stcode.ini /tmp/surfdata /log/idc/crtsurfdata2.log\n\n");
printf("inifile 全国气象站点参数文件名。\n");
printf("outpath 全国气象站点数据文件存放的目录。\n");
printf("logfile 本程序运行的日志文件名。\n\n");
return -1;
}
if(logfile.Open(argv[3],"a+",false) == false){
printf("logfile.Open(%s) failed.\n", argv[3]); return -1;
}
logfile.Write("crtsurfdata2 开始运行。\n");
//这里插入业务代码
//把站点参数文件加载到vstcode容器中。
if(LoadSTCode(argv[1])==false) return -1;
logfile.WriteEx("crtsurfdata2 运行结束。\n");
return 0;
}
bool LoadSTCode(const char *inifile)
{
CFile File;
//打开站点参数文件。
if(File.Open(inifile,"r")==false)
{
logfile.Write("File.Open(%s) failed.\n",inifile); return false;
}
char strBuffer[301];
CCmdStr CmdStr;
struct st_stcode stcode;
while(true)
{
//从站点参数文件中读取一行,如果已读取完,跳出循环。
if(File.Fgets(strBuffer,300,true)==false) break;
//把读取到的一行拆分
CmdStr.SplitToCmd(strBuffer,",");
//把站点参数的每个数据项保存到站点参数结构体中。
CmdStr.GetValue(0, stcode.provname,30); //省
CmdStr.GetValue(1, stcode.obtid,10); //站号
CmdStr.GetValue(2, stcode.obtname,30); //站名
CmdStr.GetValue(3,&stcode.lat); //纬度
CmdStr.GetValue(4,&stcode.lon); //经度
CmdStr.GetValue(5,&stcode.height); //海拔高度
//把站点参数结构体放入站点参数容器。
vstcode.push_back(stcode);
}
for (int ii = 0; ii < vstcode.size(); ii++)
logfile.Write("provname=%s,obtid=%s,obtname=%s,lat=%.2f,lon=%.2f,height=%.2f\n",vstcode[ii].provname,vstcode[ii].obtid,vstcode[ii].obtname,vstcode[ii].lat,vstcode[ii].lon,vstcode[ii].height);
//关闭文件。
return true;
}
上面是我crtsurfdata2.cpp的代码我反复检查了应该是没有问题的,希望老师能够解惑,谢谢。
使用如下代码可以输出下图结果,中文显示正常
for (int ii = 0; ii < vstcode.size(); ii++)
{
logfile.Write(vstcode[ii].provname,vstcode[ii].obtid,vstcode[ii].obtname,vstcode[ii].lat,vstcode[ii].lon,vstcode[ii].height);
}
我不明白为什么logfile.Write("provname=%s,obtid=%s,obtname=%s,lat=%.2f,lon=%.2f,height=%.2f\n",vstcode[ii].provname,vstcode[ii].obtid,vstcode[ii].obtname,vstcode[ii].lat,vstcode[ii].lon,vstcode[ii].height);
就是不可以正常输出