关于C++中的ifstream用法

用accumulate求一个vectoe中的所有元素之和,程序如下:
#include
#include
#include
#include
using namespace std;

int main(int argc,char *argv[])
{
ifstream in(argv[1]);
if (!in){
cout << "打开文件失败" << endl;
exit(1);
}
vector vi;
int val;
while (in >> val)
vi.push_back(val);
cout << "序列中的整数之和为:" << accumulate(vi.begin(), vi.end(), val) << "个" << val;
system("pause");
return 0;
}
编译后出现错误:
图片说明
请问这是怎么回事?想用ifstream打开一个文件,文件应该是什么格式?是否应该放置在project文件夹中?

4个回答

文件名为空了。argv[1]是否存在,你程序运行的时候附加参数的么?

Patrick_Adair
Patrick_Adair 回复caozhy: 非常感谢
3 年多之前 回复
caozhy
贵阳老马马善福专业维修游泳池堵漏防水工程 回复Patrick_Adair: 你打开命令提示符或者运行对话框,输入 x:\xx\你的exe "x:\xx\data1.txt"其中x:\xx\为路径。
3 年多之前 回复
Patrick_Adair
Patrick_Adair 我把一个名为data1.txt的文件放在了project的debug文件夹,然后编译程序并运行,一运行就出现上面这个警告说文件名为空,请问应该如何操作?我刚刚学c++,对文件操作这一块有点迷糊,请不吝赐教!
3 年多之前 回复

一般都是放在 源码目录或者debug目录

Patrick_Adair
Patrick_Adair 请问出现的这个警告是什么意思?
3 年多之前 回复

直接把argv[1]换成data1.txt

这东西不是警告,是内存报错,因为你的程序在运行过程中非法访问内存了,问题的根源是你没有理解main函数的接口的意义,argv[]数组是存放的
至少是你程序对应的exe文件在DOS下的路径,当然如果有参数还存放参数信息。当你的程序用到argc和argv这两个参数的时候,可以简单地通过判断argc的值,来看看程序的参数是否符合要求,而此时此刻,你的in对象的参数argv[1]的值是空,因为in是ifstream的文件流打开的对象,所以in参数不能为空,为空的话就打不开了,只能打开一个已经存在的文件。
http://www.cnblogs.com/avril/archive/2010/03/22/1691477.html

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!