我需要找到文件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);
}
答案 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_iterator
是InputIterator
,但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");
}