关于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;
} 展开
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;
} 展开
3个回答
展开全部
文件操作在头文件<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;
}
展开全部
基本没看懂你程序想表达的意思。但是有个明显错误是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
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就会中断,然后进行下一轮循环,也就是说,这样会丢失掉文本当中的空格或换行等字符。当然,打印出来的就会很乱。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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;
}
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是什么意思?
追答
在 报错那儿显示信息
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询