读书人

读取文件,该如何解决

发布时间: 2012-04-06 12:22:24 作者: rapoo

读取文件
#include<iostream>
#include<string>
#include<vector>
#include<fstream>

using namespace std;
using std::vector;

void getStr(string str,char ch,vector<string>&v)
{
int begin=0;
for(int i=0;i<str.length();i++)
{
if(str[i]==ch)
{
string temp=str.substr(begin,i-begin);
if(temp=="")
v.push_back("0");
else
v.push_back(temp);
begin=i+1;
}
}
}


int main()
{
string filename="123.txt";
string str;
vector<string> src;

ifstream infile(filename.c_str());
if(!infile)
{
cout<<"Open failure";
return -1;
}
while(getline(infile,str))
{
getStr(str,',',src);
src.push_back(str);
}

infile.close();

for(vector<string>::iterator it=src.begin();it!=src.end();++it)
{
cout<<*it<<endl;
}
return 0;

}
不能读取文件的最后一行,希望大家帮忙解决,谢了

[解决办法]
改成
while(!infile.eof())
{
getline(infile,str)

[解决办法]
能不能解析先不要去看,你先打印出来看是不是都读到了

C/C++ code
while(!infile.eof()){    getline(infile,str)    printf("%s\n", str);    getStr(str,',',src);    src.push_back(str);}
[解决办法]
楼主要学会自己调程序啊,呵呵,具体原因还要看你的文件之类的才能发现,这样,你再加条打印
while(!infile.eof())
{
getline(infile,str)
printf("%s\n", str);
getStr(str,',',src);
printf("%s\n", str);//这儿再打印下,看看是不是你想要解析之后的
src.push_back(str);
}
[解决办法]
不要使用
while (条件)
更不要使用
while (组合条件)
要使用
while (1) {
if (条件1) break;
//...
if (条件2) continue;
//...
if (条件3) return;
//...
}
因为前两种写法在语言表达意思的层面上有二义性,只有第三种才忠实反映了程序流的实际情况。
典型如:
下面两段的语义都是当文件未结束时读字符
whlie (!feof(f)) {
a=fgetc(f);
//...
b=fgetc(f);//可能此时已经feof了!
//...
}
而这样写就没有问题:
whlie (1) {
a=fgetc(f);
if (feof(f)) break;
//...
b=fgetc(f);
if (feof(f)) break;
//...
}
类似的例子还可以举很多。

读书人网 >C++

热点推荐