Patrick_Adair
Patrick_Adair
采纳率100%
2016-08-13 01:41 阅读 3.2k
已采纳

关于C++中的ifstream用法

30

用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条回答 默认 最新

  • 已采纳
    caozhy 从今以后生命中的每一秒都属于我爱的人 2016-08-13 02:25

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

    点赞 1 评论 复制链接分享
  • feng1790291543 鱼弦 2016-08-13 01:43

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

    点赞 评论 复制链接分享
  • qq_35553864 阿卡阿卡 2016-08-13 05:15

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

    点赞 评论 复制链接分享
  • John_ToStr John_ToDebug 2016-08-13 07:41

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

    点赞 评论 复制链接分享

相关推荐