2017-03-03 53 views
1

这是一个程序的开始,它将读取输入文件中的数字并将它们放入数组中,然后对它们进行升序并将它们打印到输出文件。计算从输入文件中排列多少“东西”

我遇到了记录输入文件中有多少数字的函数的问题(我正在试图在将数字放入数组时执行此操作)。

这里是函数的代码。没有错误。每当我运行程序它打印数字的输入量为0

int store (int arg[], int numsize, istream& infile) 
{ 
    while (infile >> arg[ //i dont know what to put here// ]) { 
    numsize++; 
    } 
return numsize; 
} 
+0

怎么没有错误,你的函数在while循环的条件中有单行注释? –

回答

2

有几个问题与您的代码:

  • 为了把任何东西方括号,你需要以确保arg有它
  • 足够的空间,但是,你不能确信这一点,因为你不知道有多少项目将如何进入
  • numsize作为参数是没用的,因为你不能修改它anywa年。
  • 此代码忽略了C++标准库容器,转而支持C风格的数组。

幸运的是,所有这一切都可以固定在C风格的数组的容器切换到std::vector<int>

std::vector<int> arg; 

现在整个读操作然后可以在一个单一的代码行完成:

std::copy(
    std::istream_iterator<int>(infile), 
    std::istream_iterator<int>(), 
    std::back_inserter(arg) 
); 

您不需要对代码中的元素进行计数,因为arg.size()可让您访问已读取元素的数量。

+0

您的评论非常有意义,谢谢。然而,我的教授想要一个函数,它可以使用数组返回输入文件中的数字个数(即使有更简单的方法来构建相同的程序)数组可以保留20 – Morgan

+1

@Morgan如果可以预先分配数组,你肯定知道这个文件不会比这个更大,用while(infile >> arg [numsize ++]);'(是的,一个分号,没有大括号)代替你的循环。 – dasblinkenlight

+0

编译器打印出“Segmentation fault(core dumped)”,然后退出。 – Morgan