关于C++中ifstream in()以及ios_base::in的问题

代码如下:

void Utilities::readFile(const string file_name, vector<double>& histogram){
    ifstream in(file_name.c_str(), ios_base::in);
    if(in == NULL){
        cout << "Error:open data file error.\n";
        getchar();
        exit(0);        
    }
    string str;
    const string delimiters = " ";
    getline(in, str);
    tokenize(str, histogram, delimiters);
} 

运行结果如下:
运行结果

2个回答

1.为什么运行到输出“open data file error”之后就不再运行了,getchar();和exit()本应该走完退出才对。
2.既然会输出“open data file error”说明if条件语句成立,即"in==NULL"为真,但是实际上一步ifstresam in中in应该是已经读入数据了,为什么会为NULL呢?

1.程序出错在打开文件上
2.之所以程序没有退出是调用了getchar()函数,在等待用户在终端输入字符
所以,建议尝试的程序改动是:
1.ifstream构造函数应该接收的是const char * 的类型,并非const string 类型,即:
readFile(const char *file_name, vector& histogram)
2.尝试使用二进制方式打开文件,即:
ifstream in(file_name.c_str(), ios_base::in|ios_base::binary);
题主可以尝试一下,如果可以将问题解决了,记得采纳哦。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
ios_base::basefield、ios_base::adjustfield和ios_base::floatfield
ios_base::basefield、ios_base::adjustfield和ios_base::floatfield三个有什么作用吗?书上讲的太模糊了,没有实例,网上也找不到,各位能不能提供实例讲解一下呀。谢谢。
很奇怪的问题 改为ios_base::in 就可以了 不能ios_base::in|ios_base::app
否则打开错误 为什么??rnmain()rnrn// 以输入和附加模式打开rnfstream inOut("copyout", ios_base::in );rnint cnt = 0; // 字节计数器rnchar ch;rnwhile ( inOut.get( ch ) )rnrncout.put( ch ); // 在终端回显rn++cnt;rnif ( ch == '\n' ) rninOut << cnt ;rninOut.put( ' ' ); // 空格rnrnrn// 输出最终的字节数rninOut << cnt << endl;rncout << "[ " << cnt << " ]" << endl;rnreturn 0;rnrnrn???
ios_base
想问一下ios_base和ios关系,使用ios::out 和ios_base::out 貌似效果一样
关于ifstream的问题
下面是出问题的代码,其中Record是自己定义的类,为了描述方便,将原先的私有变量都改写成公有变量的形式rnrnRecord rec;rnifstream fin(fileName);rnrnfor(i=0;!fin.eof();i++)rnrn fin.seekg(i*sizeof(Record),ios_base::beg);rn fin.read((char *)&rec,sizeof(Record));rnrn if(!fin.eof())rn rn if(rec.exist) //exist是布尔类型rn cout<
请教,关于ifstream的问题
我这样打开一个文件:rn fin = new ifstream;rnrn fin->open (sourcefile,rn ios::nocreate |ios::binary ,rn filebuf::sh_read );rnrn第一次读是正确的,也没有close它,可是再次读文件时rn使用seekg再 tellg可以得到正确的文件长度rnrn然后seekg(0,ios::beg),再eof()居然为真,无法再读取数据了rnrn我只能先close ,再使用相同方法open一次,结果正确rnrn请问是什么原因?rnrn谢谢!
关于ifstream的奇怪问题
我用ifstream打开了一个文本文件,rn用getline读文件到尾部,这时我想用seekg重新指向文本文件的头部,rnseekg(0);无效!!!rnrn最后不得不用 file.close();file.open(filename;rn关闭文件,重新打开来完成。rnrn书上都是以BIN模式打开文件后,用seekg函数的,是不是用在文本文件不行呢?rnrn
关于ifstream 的一个问题
int main()rnrn string name, id;rn int amount;rnrn ifstream infile;rn infile.open("member.txt");rn……rn infile.close();rnrn infile.open("book.txt");rn infile>>name>>id>>amount;rn //在这部分的操作中发现,无法把文件中的值读到变量中,不知道是不是因为ifstream的使用有误,请高手指点啊rn……rn infile.close();rn
关于 ifstream 的问题
我在读入文件时用到 getline(InFile,buf); 直到文件结束rn下次再想读入文件时怎么从文件头开始读?rn(我刚开始学C++,请帮帮忙,多谢!)
关于ifstream流的问题
ifstream infile;rn用infile打开文件的后缀名有限制吗?rn比如*.txt *.ini等等。
关于ifstream的简单问题
怎样才能实现让ifstream流的文件指针往回移动一个字符?
关于ifstream使用的问题
我写了一个练习的小程序,实现将一个指定文件中的数据读到一个set容器中,可是运行的时候发现一x些问题rn前面读入set的代码没出现问题rn但是第二段里面 我想通过seekg函数从新回到文件头,再一次打印出文件的内容,但是没有成功rn第三段 我通过原来的ifstream对象初始化一个新的对象 然后用新的对象读取文件内容 程序运行崩溃rn请求高人解答rn#include "stdafx.h"rn#include "MapCount.h"rnrnint main(int argc, char* argv[])rnrn ifstream inSet("d:\\words");rn set setTest;rn MapCount mc;rnrn string word;rnrn while(inSet>>word)rn rn cout<<"section2"<>word)rn rn cout<<"*****"<>word)rn rn cout<<"........"word<
关于ifstream的用法问题
#include rn#include rn#include rnusing namespace std;rnint main()rn string ifile;rn cout << "please enter file name" << endl;rn cin >> ifile;rn //ifstream infile(ifile.c_str());rn ifstream infile;rn infile.open(ifile.c_str());rn if(!infile)rn cerr<<"ifstream had something wrong"<> sds; //我在当前目录下也建立了文件,但是为什么这句不能执行?rn system("pause");rn rn return 0;rnrn希望高手指点迷津
关于ios_base::skipws的使用?
请看下列代码:rnrn#include rn#include rnrnusing namespace std;rnrnint main(void)rnrn cin.unsetf(ios_base::skipws);rnrn string s1;rn cin >> s1;rnrn for (int i=0; i<8; i++)rn rn cin >> s1;rn rnrn cout << s1 << endl;rnrnrninput: _test //前面的下滑线代表空格rnoutput: _ //同上rnrn请解释一下!rn
关于 ifstream
不匀许用 rdbuf() 的函式rn怎么才能从档案输入,在输出,而输出的文件跟输入的一模依样rnrn比如 数入原文件 1.txtrnrn123 456rnrnl love chinrnrnrnarnrn输出原文件 2.txtrnrn123 456rnrnl love chinrnrnrnarnrn不要把它变成 123 456I love china 或 123 456 呢?
ifstream 中的getline的问题
[code=C/C++]rn#include rn#include rnusing namespace std;rnrnint main() rnrn const char *InFile="D:\\InData.txt";rnrn ifstream in(InFile,ifstream::in);rn if(!in)rn rn cerr<<"Open file "<
关于ifstream
程序如下:test1.txt and test2.txt均存在于当前目录,但是test1.txt可以打开,但是试图打开test2.txt却不行了,就退出了。什么原因?????rnifstream input;rninput.open("test1.txt");rnif(!input)rnexit(1);rnwhile(!input.eof())rnrn...rnrninput.close();rnrninput.open("test2.txt");rnif(!input)rnexit(1);rnwhile(!input.eof())rnrn...rnrninput.close();rnrn
急问:关于ifstream中定位的问题
为什么每次读到都是同一个字母? 也就stream_buffer中的游标不往后走呢?是tellg()的问题吗?rnrnifstream infile.open("1.txt");rnifstream::pos_type cur;rnstring sentence;rnchar word1;rnwhile(infile>>word1) rnrn sentence+=word1;rn cur=infile.tellg(); //cur在是程序中是有用的,只是这里没显示rnrnrn请达人指教,bow~
关于C++中的ifstream用法
用accumulate求一个vectoe中的所有元素之和,程序如下:n#includen#includen#includen#includenusing namespace std;nnint main(int argc,char *argv[])nn ifstream in(argv[1]);n if (!in)n cout << "打开文件失败" << endl;n exit(1);nnvector vi;nint val;nwhile (in >> val)nvi.push_back(val);ncout << "序列中的整数之和为:" << accumulate(vi.begin(), vi.end(), val) << "个" << val;n system("pause");n return 0;nn编译后出现错误:n![图片说明](https://img-ask.csdn.net/upload/201608/13/1471052289_842015.jpg)n请问这是怎么回事?想用ifstream打开一个文件,文件应该是什么格式?是否应该放置在project文件夹中?
关于ios_base::app 的问题,高手请指点
rn我调试了一个关于文件输入输出的程序(《c++primer》中的例子)其中有下面这句:rn fstream inOut( "copy.out", ios_base::in|ios_base::app );rn但是调试却出现下面的错误rnerror C2653: 'ios_base' : is not a class or namespace namernerror C2065: 'app' : undeclared identifierrn程序前面的#include ,#include 我都加上了,为什么还会出错呢?另外,我发现在《c++primer》中只写#include ,#include 就可以,但是在我的编译器中这样写就会出现错误了,是不是我的编译器有问题
关于cout.setf(ios_base ::showpoint)的一个问题
#include rnrnusing namespace std;rnrnint main()rnrn float a=2.4;rnrn cout <<"before showpoint,a="<
ios_base::binary。。。。。
谁能解释一下rnios_base::binary的用途rn最好附上一实例rn有代码最好rnrn我想理解一下
关于ifstream打开文件模式的问题
rn ofstreamrn 如果文件存在则清空,即从头开始写入rn 如里文件不存则新建,再写入rn rn ios_base::out|ios_base::binary|ios_base::in 这样对吗?rnrnrn rnrnrn ifstreamrn 如果文件存在则读取rn 如果文件不存在则新建rn rn ios_base::in|?? 还要什么?
一个关于ifstream::get()的问题
请看如下程序:rn//Strfile.cpprn#include rn#include rnconst int SZ = 20;rnvoid main()rnrn char buf[SZ];rn ifstream in("Strfile.cpp");rn assert(in);rn ofstream out("out.txt");rn assert(out);rn while(in.get(buf,SZ))rn rn if(in.get() == '\n')rn in.get();rn cout<'rnrninclude rnonst int SZ = 20;rnoid main()rnrnchar buf[SZ];rnifstream in("Strfilrn.cpp");rnassert(in);rnofstream out("out.trnt");rnassert(out);rnwhile(in.get(buf,SZrn)rnrn if(in.get() == '\nrn)rn in.get();rn cout<
请教一个关于ifstream的问题
下面的程序,urls.txt的内容只有四行,为什么程序最后打印出5来?rn#include rn#include rnusing std::ifstream;rnusing std::cout;rnusing std::endl;rnrnint main()rnrn int i=1;rn ifstream inputFile("c:\\urls.txt");rn while (! inputFile.eof())rn rn cout << i++ << endl;rn rn
关于ifstream::eof() 的问题,求助!
一个txt文件中的内容为 1234,以缺省方是打开之后,用eof()判断是否到文件尾,rn但是却总是要将最后一个字符读出两遍之后,才能得到正确结果,我不知道为什么,rn望能指点rnrn如下一段代码:rnrnifstream fin("aa.txt", ios_base::in | ios_base::binary);rnchar temp;rnrnwhile (!fin.eof())rnrn fin.getchar(temp);rn cout<
关于txt文件ifstream读取的问题
txt里面是rnrn71 21 117 1 2ec694 109rn11 21 133 1 547d43 135rn75 21 133 1 547d43 135rnrnlinux环境 听说不能用"\n" 所以我采取了如下的方法rn int id,st,et,iswrite,data,size;rn string line;rn stringstream ss;rn getline( finTest, line);rn这里 ss << line;rn这里 ss >>id>>st>>et>>iswrite>>hex>>data>>dec>>size ;rn cout<>id>>st>>et>>iswrite>>hex>>data>>dec>>size ;rn cout<
ifstream问题
代码如下rn[code=c]#include rn#include rn#include rnrnusing namespace std;rnconst int SIZE = 60;rnint main()rnrn char filename[SIZE];rn ifstream inFile;rnrn cout<<"Enter name of data file:";rn cin.getline(filename, SIZE);rn inFile.open(filename);rn if(!inFile.is_open())rn rn cout<<"could not open the file "<>value;rn [color=#FF0000]while(inFile.good())rn rn ++count;rn sum += value;rn inFile>>value;rn [/color]rn if(inFile.eof())rn rn cout<<"End of the file.\n";rn rn else if(inFile.fail())rn rn cout<<"Input terminated by data mismatch.\n";rn rn [color=#FF0000]if(count == 0)rn rn cout<<"No data processed.\n";rn rn elsern rn cout<<"Items read:"<
ifstream的问题
一个ifstream对象只能打开一次文件么?rnrnifstream ifs( file_name_1 );rnassert( ifs );rnifs.close();rnrnifs.open( file_name_2 );rnassert( ifs ); //为什么这句话assert出错了,file_name_2是一个合法的普通文件;rnifs.close();rn
ifstream 的问题
//------------------写入------------------------rnvector test;rntest.push_back("111");rntest.push_back("222");rnrnofstream out("test.dat",ios_base::out | ios_base::binary);rn[color=#008080]copy(test.begin(),test.end(),ostream_iterator(out,"\n"));[/color]rnint i = 10;rnout.write((char*)(&i) , sizeof(int));[color=#FF0000]//这个写入的10,怎么在下面读取出来呢?[/color]rnout.close();rntest.clear();rn//------------------读取-------------------------rnifstream read("test.dat",ios_base::in | ios_base::binary);rnint pos = read.tellg(); //[color=#FF0000]pos = 0[/color] rn[color=#0000FF]copy(istream_iterator(read),istream_iterator(),back_inserter(result));[/color]rnif(read.fail())rnrn// [color=#FF0000]进来了[/color]rnrnpos = read.tellg(); //[color=#FF0000]pos = -1[/color]rnrn//------------------ 问题-------------------------rn我用了 [color=#0000FF]copy(istream_iterator(read),istream_iterator(),back_inserter(result));[/color]rn之后,文件流被关闭了,我怎么才能读取 写入的 i ?rn难道非要我遍历vector,一个一个自己写,再一个一个自己读?
关于 ifstream 的问题,高手帮忙!
使用ifstream f1("temp")打开的文件进行流操作f1>>zh>>zh>>zh, 如何获取文件的rn的当前位置并对当前位置的值进行替换?如何回到文件头?
关于C中的类型转换的问题以及原则
main()rnrnchar a='a';rnint b=8;rnfloat c=9.0;rnprintf("%d\n",sizeof(c-a-b));rnrnrnrn这个问题怎么扩展成双精度的了 我认为是单精度已经够了的 难道说不够减所以要扩展成双精度 rn但是如果是字符型减短整型也应该有可能不够减 “正”-“负”也有可能超出短整形 而把短整型扩展成长整型
ifstream 问题?
我用ifstream不能正确读取数据, 不知道是哪里弄错了。rnrn我先用 ofstream 写了一个文件 然后 通过ifstream来读取 而每次只要读到第104字节就停止读取了。 下面是两个代码块, 请大家帮我看看代码哪里有问题。rnrnrn // write datarn ofstream HSL2RGBFile;rn HSL2RGBFile.open ("HSL2RGB.bin",ios::binary);rnrn for( unsigned int i=0; i(imageData-4), sizeof(byte)*4);rn rn rn rn HSL2RGBFile.close();rnrn // read datarn ifstream Reader("HSL2RGB.bin", ios::in);rn char *buffer = new char[256*256*256*4];rn Reader.read(reinterpret_cast(buffer), 256*256*256*4); // can only get 104 bytes ??????rn Reader.close();rnrnrnrn
ifstream 问题
我想把一个由行号,列号,权值组成的txt文件(大概384行),放入矩阵a中 ,然后矩阵自乘.rn #include rn #include rn main() rn rnint matrix[384][3]; rnchar filename[] = "384.txt"; rnifstream f("384.txt",ios_base::in); // 这句抱错啊,55555555555555rnrnint r,c; rnwhile(f>>r) //读行号 rn rnf>>c; //读列号 rnf>>matrix[r][c]; //读权值 rn rnint i,j,m; rnint b[384][384]; rnfor(i=0;i <=383;i++) rn rnrnfor(j=0;j <=383;j++) rn rnb[i][j]=0; rnfor(m=0;m <3;m++) rn rnb[i][j]=matrix[i][m]*matrix[i][m]+b[i][j]; rn rn rn rnprintf("here is the answer:\n"); rnfor(i=0;i <=383;i++)//所有数组下标都以0开始 rn rnfor(j=0;j <=383;j++) rn rnprintf("%d ",b[i][j]); rn rnprintf("\n"); rn rn rnrn
C++中关于ifstream::getline和getline(ifstream,string)的用法
[img=https://img-bbs.csdn.net/upload/201611/04/1478263018_567522.png][/img]
ifstream在UNIX中的路径问题
我定义了一个输入流rnstring Buf="/home4/test.txt";rnifstream ITEST(Buf.txt,ios::in);rnif(!ITEST)rnrn cerr<<"Fail to open "<
ios_base::fiexd ios_base::floatfield区别是什么?
ios_base::fixed,和ios_base::floatfield的区别是什么啊?为什么我使用rncout.setf(ios_base::fixed)和cout.setf(ios_base::floatfield)效果是一样的?定点输出格式是什么能给我举个例子吗?我不太明白。
请教ios_base基类的定义的问题
请教ios_base基类的定义的问题rnrn在头文件 ios 中,有 basic_ios 类的定义,即rntemplate >rn class basic_ios : public ios_base rn这说明 ios_base 是 basic_ios 的基类,但是我不知ios_base是在哪里定义的,我如何查到呢?rn另外,我不解的是,这个文件中好象没有引用定义 ios_base 的头文件呀,但是却可以直接使用 ios_base,如rnpublic ios_base 这一句,我想问,系统是如何识别的呢?rnrn[code=C/C++]rn// ios standard headerrnrn#if _MSC_VER > 1000 /*IFSTRIP=IGN*/rn#pragma oncern#endifrnrn#ifndef _IOS_rn#define _IOS_rn#include rnrn#ifdef _MSC_VERrn#pragma pack(push,8)rn#endif /* _MSC_VER */rn_STD_BEGINrn // TEMPLATE CLASS basic_iosrntemplate >rn class basic_ios : public ios_base rnpublic:rn typedef basic_ios<_E, _Tr> _Myt;rn typedef basic_ostream<_E, _Tr> _Myos;rn typedef basic_streambuf<_E, _Tr> _Mysb;rn typedef ctype<_E> _Ctype;rn explicit basic_ios(_Mysb *_S)rn init(_S); rn basic_ios(const _Myt& _R)rn init(0), *this = _R; rn virtual ~basic_ios()rn[/code]rn
相关热词 c# 线程结束时执行 c# kb mb 图片 c# 替换第几位字符 c#项目决定成败 c# 与matlab c# xml缩进 c#传感器基础 c#操作wps c# md5使用方法 c# 引用父窗口的组件