0

您好,我正在使用 c++ 中的控制台程序,该程序使用 I/O 读取文本文件并输出文本文件中数字的平均值。但是,当数字打印出来时,它们会垂直显示在输出文件中。c++ 中是否有分隔符来水平输出我的数组?

这是我输出的内容:

 for( i = 1; i < 10; i++)
  {
      inFile >> retrievenum[i];

      sum += retrievenum[i];
 //Here I'm outputting the array to my output textfile
      outFile <<retrievenum[i] << endl;

  }
4

5 回答 5

3

在 for 循环之后不要使用 << endl。

Endl 表示要结束行并刷新缓冲区。在这种情况下,这不是您想要做的。你可以输出任何你想要的分隔符来代替 endl,或者什么都不做,让它们一起运行。

如果您在循环内进行了长时间操作,您可能希望在每次输出后刷新缓冲区而不使用结束行std::flush;

于 2013-10-03T21:22:46.693 回答
1

您可以尝试使用选项卡来分隔输出。制表符由字符 表示'\t'

for( i = 1; i < 10; i++)
{
    inFile >> retrievenum[i];

    sum += retrievenum[i];
    //Here I'm outputting the array to my output textfile
    outFile <<retrievenum[i] << '\t';
}

//  outFile << endl;
于 2013-10-03T21:22:32.097 回答
1

std::endl\n性格相似。它结束当前行,任何未来的输出都将在下一行。取出endl将使您的输出全部集中在一条线上。你可以用一些不同的东西来代替它。

'\t'    //put a tab between each output
" "     //put a space between each output
", "    //put a comma and space between each output, etc.
于 2013-10-03T21:25:26.417 回答
1

而不是做一个循环:

std::copy(retrievenum, retrievenum + 10, std::ostream_iterator<int>(cout, " "));
std::cout << std::endl;

或者对于您的所有 3 个操作:

std::vector<int> vec;
std::copy(std::istream_iterator<int>(inFile), std::istream_iterator<int>(), std::back_inserter(vec));
sum = std::accumulate(vec.begin(), vec.end(), 0);
std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
于 2013-10-03T21:26:20.817 回答
1

好吧,只需从您的 cout 中删除 endl 并将其替换为空白,这将使输出更具可读性并且它将水平打印。

于 2013-10-03T21:31:10.573 回答