找到最大数量

时间:2014-11-09 19:08:22

标签: c max

我需要找到文件in.txt中包含内容12 7 -14 3 -8 10的最大数字,然后将其写入文件out.txt。这是我的完整代码:

#include <conio.h>
#include <stdio.h>

main() {
  int N, max;
  FILE*F;
  F = fopen("in.txt", "r");
  FILE*G;
  G = fopen("out.txt", "w");
  fscanf(F, "%d", &max);
  while (feof(F)) {
    fscanf(F, "%d", &N);
    if (max < N)
      max = N;
  }
  printf("max=%d", max);
  fprintf(G, "%d", max);
  fclose(F);
  fclose(G);
} 

2 个答案:

答案 0 :(得分:0)

在C ++ 14中,您可以std::max_element直接使用std::istream_iterator

std::ifstream inf("in.txt");
auto it = std::max_element(std::istream_iterator<int>(inf), std::istream_iterator<int>());

if (it != std::istream_iterator<int>()) {
    std::ofstream outf("out.txt");
    outf << *it << std::endl;
}

在C ++ 11及更早版本中,这似乎是未定义的行为(因为istream_iteratorInputIterator,但max_element需要ForwardIterator),所以在那些在使用std::vector之前,您需要在容器中阅读文件的变体(最像max_element)。

答案 1 :(得分:0)

feof()的使用不正确。

请勿使用feof()检查是否有其他输入。 feof()报告之前的 I / O操作导致文件结束条件。

IOW,检查输入操作的结果,例如fscanf()

推荐:

int MaxFound = 0;
while (fscanf(F, "%d", &N) == 1) {
  if (MaxFound) {
    if (N > Max) {
      Max = N;
    }
  } else {
    MaxFound = 1;
    Max = N;
  }
}
if (MaxFound) {
  printf("max=%d\n", max);
} else {
  puts("max not found");
}