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

总是显示 string subscript out of rangestring 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;}
2026年09月25日 20:32
有3个网友回答
网友(1):

文件操作在头文件里面;

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

#include 
#include 
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;
}

网友(2):

基本没看懂你程序想表达的意思。但是有个明显错误是while (fin >> test[i])
test对象是动态的,不同于低级数组。此时,test是空的,你进行下标操作肯定是错误的。

然后鉴于没看懂你的程序,我按你的思路写个简单的例子:
#include
#include
#include
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

网友(3):

while(fin>>test[i])i++; //test[i] 什么类型? 可以先定义, 然后读取
count=i;
}
for(int i=0;icout<
例子 :

#include
#include
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< }
cout< max=a[0];order=0;
for(i=0;i<10;i++)
{
if(a[i]>max)
{
max=a[i];
order=i;
}
}
cout<<"max="< infile.close();
return 0;
}