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

总是显示 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;
}

文件操作在头文件<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;
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-05
基本没看懂你程序想表达的意思。但是有个明显错误是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就会中断,然后进行下一轮循环,也就是说,这样会丢失掉文本当中的空格或换行等字符。当然,打印出来的就会很乱。

追问

那fileName.c_str()能不能改成我的文件路径 要是不输入文件路径他怎么知道我要读哪个文件啊?但是我改成路径之后 他老自动跳出 什么都没输出啊

追答

可以直接改成文件路径字符串的。fileName.c_str()本身就是一个const char* 类型,即字符串常量类型,所以完全可以。
我这里写的是你在程序当中输入文件路径。如果你想做测试用,可以直接改的。将上面的几行注释掉,然后fstream fs(Your File Path)

第2个回答  推荐于2017-09-02
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是什么意思?

追答

在 报错那儿显示信息

追问

改成这样了。。。然后还有错 二进制“>test[i];
cout<<test[i];}
}
return 0;
}

追答

差头文件 #include

追问

有那个 头文件 在前面 然后就出了这个

追答

#include
#include
#include
using namespace std;

int main()
{
string test[50];
int choose=0;
int count = 10;
fstream fin("test.txt"); //自我感觉用相对路径比较好 ,test.txt 在该工程下
int i=0;
if(!fin)
{
cerr>test[i])) // 以此判断是否结尾
{
cout<<test[i]<<"\n"; // 输出到控制台
i++;
}
return 0;
}

本回答被提问者和网友采纳

C++中函数 ofstream outfile,文件路径名的问题
C++中Txt文件读取和写入 一、ASCII 输出 为了使用下面的方法, 你必须包含头文件<fstream.h>(译者注:在标准C++中,已经使用<fstream>取代< fstream.h>,所有的C++标准头文件都是无后缀的。)。这是 <iostream.h>的一个扩展集, 提供有缓冲的文件输入输出操作. 事实上, <iostream.h> 已经被<fstream...

c++如何读取数据和写入.txt文件?
c++读取txt文件,只需引入必要的头文件,利用istreambuf_iterator即可。函数封装简化操作,对于文件读取任务,此方法简单高效。编写程序前,确保已包含所需头文件。例如,通常使用fstream库。创建函数以读取文件内容,函数接受文件路径作为参数。初始化istreambuf_iterator,并将其绑定到ifstream对象。利用该迭代...

C++中如何利用<fstream>从txt文件中读入和输出完整的一句话?
ofstream file3("c:\\\\x.123");\/\/以输出方式打开文件 所以,在实际应用中,根据需要的不同,选择不同的类来定义:如果想以输入方式打开,就用ifstream来定义;如果想以输出方式打开,就用ofstream来定义;如果想以输入\/输出方式来打开,就用fstream来定义。二、关闭文件 打开的文件使用完成后一定要关闭,fstream提供了成员...

C++中关于用fstream创建文件的问题
你用了ios::in,表示要读入文件,所以程序会认为已有这个文件,而不会去创建。你要是把ios::in去掉就能创建了。另外你说用.txt文件可以创建,我试过了,不行。

为什么我的c++读取不了文件,文件能打开,但是数据读不出来,为什么_百度知...
你要读进来的是字符型,所以定义 int p[10]; 要改为 char ch[256]类型 int main(){ char ch[256];fstream infile;infile.open("tabsay.txt", ios::in);if(!infile){ cout<<"cannot find this file.\\n";return 1;} for(int i=0;i<10;i++){ infile>>ch;cout<<ch<<endl;} ...

在C++中,如何读取一个txt文件,或向txt文件中写入数据 ?
一、写入文件#include <fstream>using namespace std;void main(){ofstream in;in.open("com.txt",ios::trunc); \/\/ios::trunc表示在打开文件前将文件清空,由于是写入,文件不存在则创建int i;char a='a';for(i=1;i<=26;i++)\/\/将26个数字及英文字母写入文件{if(i<10){in<<"0"<<i<...

c++ 如何用 ifstream 读取txt文件的全部内容,并存入变量中
\/\/vs2008实测通过 include <fstream> include <stdio.h> using namespace std;void main(){ ifstream infile;infile.open("test.txt",ios::in);char str[1000];while(!infile.eof()){ infile>>str;} printf("%s\\n", str);\/\/已保存在变量str中 infile.close();} ...

求VC++读取TXT编程高手!我已经被折磨几天了!!!
你这不是纯Windows流吗?读取文本用STL的fstream对象.和windows控件交接的时候 Edit_SetText( hEdit, fstream.str().c_str() ) ;C++和STL要了解的,程序结构清晰,像你这样全部用底层API,不会用多久,程序架构就会因为复杂坍塌掉.

c++ 如何用 ifstream 读取txt文件的全部内容
include <fstream> ifstream fin("a.txt");以后在程序中用 fin>> 流入变量。当然a.txt要和exe在同一文件夹。否则双引号中要加上路径,如c:\\a.txt 若不懂,请参考c++文件流。

c++程序问题,运行程序时显示不能打开word.txt文件,这是为什么?怎么解决...
words.txt中内容就是English include <iostream> include <fstream> include <string> using namespace std;int main(){ int x,m_Length;string m_Word;\/\/ 记录随机数的变量 ifstream infile;\/\/ 文件流,srand(time(NULL));\/\/ 根据时间得到一个随机数,infile.open("words.txt");\/\/ 打开文件 i...

相似回答