关于C++ 的 fstream 不会用 想读取txt文件

总是显示stringsubscriptoutofrangestringtest;//输入缓冲区structbuffer{charleft;charright[50];}B... 总是显示 string subscript out of range

string test;
//输入缓冲区
struct buffer{
char left;
char right[50];
}BUF;
//
int main(){
int choose=0;
int count;
cout<<"请输入测试用例的符号数"<<endl;
cin>>count;
cout<<"\t\t输入测试用例请输入“1”\n\t读取文件获取测试用例请输入“2”"<<endl;
cin>>choose;
if(choose=2){
fstream fin("C:\\Users\\HP\\Desktop\\test.txt");
int i=0;
while(fin>>test[i])i++;
count=i;
}
for(int i=0;i<count;i++)
cout<<test[i];
return 0;
}
展开
 我来答
zhouxc992
推荐于2017-09-04 · TA获得超过226个赞
知道小有建树答主
回答量:181
采纳率:0%
帮助的人:168万
展开全部

文件操作在头文件<fstream>里面;

用fstream定义一个流,再对这个流进行操作即可。具体见例子。

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    //首先定义一个流 input_stream
    fstream input_stream;
    //然后用流的open函数打开一个文件,最好用绝对路径,注意为了避免路径被解释为转义字符,必须用双斜杠。最后的 ios::in 参数表示读取。
    input_stream.open("D:\\temp.txt",ios::in);
    int a;
    //下面这句表示从流内读取一个整数到变量a,可以类比 cin 的使用方法
    input_stream >> a;
    cout << a << endl;
    return 0;
}
zyd427
2012-10-05 · TA获得超过354个赞
知道小有建树答主
回答量:191
采纳率:0%
帮助的人:234万
展开全部
基本没看懂你程序想表达的意思。但是有个明显错误是while (fin >> test[i])
test对象是动态的,不同于低级数组。此时,test是空的,你进行下标操作肯定是错误的。

然后鉴于没看懂你的程序,我按你的思路写个简单的例子:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
string fileName;
cout << "Enter filename: ";
cin >> fileName;
fstream fs(fileName.c_str());
if (!fs) {
cout << "can't open file: " << fileName << endl;
return -1;
}

string test;
while (getline(fs, test))
cout << test;
fs.close();

return 0;
}

还有,ifstream ofstream一般用与单项的操作,fstream 用于双向的。
ifstream派生于istream
ofstream派生于ostream
fstream派生于iostream
iostream派生于istream和ostream
更多追问追答
追问
getline(fs, test)是什么意思?
追答
获取文本行的函数
因为文本中如果出现空格或换行,那么fs >> test就会中断,然后进行下一轮循环,也就是说,这样会丢失掉文本当中的空格或换行等字符。当然,打印出来的就会很乱。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mxj9945
推荐于2017-09-02 · 超过19用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:44.3万
展开全部
while(fin>>test[i])i++; //test[i] 什么类型? 可以先定义, 然后读取
count=i;
}
for(int i=0;i<count;i++)
cout<<test[i]; //一样

例子 :

#include <iostream>
#include <fstream>
using namespace std;
int main()
{
int a[10],max,i,order;
ifstream infile("f3.dat",ios::in);
if(!infile)
{
cerr<<"oper error!\n";
exit(1);
}
for(i=0;i<10;i++)
{
infile>>a[i];
cout<<a[i]<<" ";
}
cout<<endl;
max=a[0];order=0;
for(i=0;i<10;i++)
{
if(a[i]>max)
{
max=a[i];
order=i;
}
}
cout<<"max="<<max<<"\norder="<<order<<endl;
infile.close();
return 0;
}
更多追问追答
追问
cerr是什么意思?
追答
在 报错那儿显示信息
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式