用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文件夹中?
文件名为空了。argv[1]是否存在,你程序运行的时候附加参数的么?
一般都是放在 源码目录或者debug目录
直接把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