这个问题还是发生在VECTOR的应用过程中,我在用VECTOR进行数据读取时,发现多读了一行,虽然就目前我的小工具开发来言无上大雅,但是问题还是要解决,不然日后可能会成为一个大BUG也说不定呢。
首先,我还是问了度娘,我二姨夫还在我旁边煞有介事的看我解决问题的思路,我跟他说,百度!正在他不屑的时候,网页上直接弹出了解决EOF多读一行的问题哈哈,搜到了一位同行整理的这个问题的解决方法,看了一遍照做后发现没有起作用,可能是我没有理解透吧,最后还是二姨夫给我解决了,这个办法就更基础和接地气一点,小小的总结一下:
以下是我写的代码:
FILE *fp = fopen(path, "r");
vector<ZB*> vTemp;
while(!feof(fp))//如果不到文本末尾,循环执行操作,将坐标读入vector
{
ZB*obj = new ZB();
fscanf(fp,"%s %lf %lf", &obj->dd,&obj->xx, &obj->yy);
string strTemp = (obj->dd).c_str();
boolbFlag = strTemp.empty();
if(bFlag)
{
break;
}
vTemp.push_back(obj);
}
fclose(fp);
上文红色的部分是二姨夫给我加上的判断代码。之前没有加这几行的时候容器会把文档最后的换行给读进去产生一行错误数据,加上之后问题就迎刃而解了。第一句,stringstrTemp = (obj->dd).c_str();还是不知名原因造成的无法识别string类型,只好再转一下;第二句以及后面的判断的意思就是判断一下接下来读到的数据是否是空值,如果是空值,就停止读取。如此便轻松解决了多读取一行的问题,暂时不用花太多心思去研究EOF的问题了,但是后续都还是要搞明白的。
搜索到的EOF解决多读一行的原文:http://blog.csdn.net/woaisia/article/details/46441449