C - 查找数组

时间:2016-10-12 01:29:46

标签: c arrays file max

我正在处理一个程序,我正在访问文件输入,并循环遍历文件中的一组值。但是,它没有正确计算最大值。有什么帮助吗?

#include <stdio.h>

int main() {

int header, i, j, cur_val, auction[50], sum = 0;
int max = 0;

FILE * ifp;

ifp = fopen("input.txt", "r");

fscanf(ifp, "%d", &header);

for (i = 0; i < header; i++) {

    fscanf(ifp, "%d", &cur_val);
    printf("%d\n", cur_val);

    for (j = 0; j < cur_val; j++) {
        fscanf(ifp, "%d", &auction[j]);

        printf("%d\n", auction[j]);

        max = auction[0];
        if (auction[j] > max) {
            max = auction[j];
        }

    }//end j loop

    printf("Max: %d\n", max);
    printf("\n");
    //printf("Auction %d was sold for $%.2f!\n", i+1, );
    //sum+=max;

}//end i loop

fclose(ifp);


return 0;

}

这里是文件输入:

5

4

100 500 250 300

1

700

3

300 150 175

2

920 680

8

20 10 15 25 50 30 19 23

打印到控制台的最大值如下:

300 700 300 920 23

中间3工作但不是第一个和最后一个。知道为什么吗?

3 个答案:

答案 0 :(得分:2)

你设置max = auction [0];在每个循环中,消除以前的最大值。

在循环中仅初始化最大值一次,或在循环外初始化最大值(在读取第一个值之后)。

答案 1 :(得分:1)

您在列表中找到的最后一个数字比拍卖[0]

更大

答案 2 :(得分:0)

线性 max_value循环的规范实现是这样的

鉴于

  • N值
  • MIN_N&lt; = N&lt; = MAX_N

max_value = MIN_N for i in 1...N if values[i] > max_value max_value = values[i]

现在,您可以将所有值读入数组(我上面称之为values),或者只是一次读取一个值。

将此转换为C,并假设数组为简单起见:

int max_value = MIN_N;
for (int i = 0; i < N; ++i) {
    if (values[i] > max_value)
        max_value = values[i];
}
printf("Max %d\n", max_value);

对于您的实际分配,您需要将其包装在循环中以处理所有测试用例。我可能会读取数字,因为我不需要内存管理等。

FILE *f = open_input_file(); // could return stdin for testing
int T = read_an_integer(f);

for (int t = 0; t < T; +=t) {
    int N = read_an_integer(f);
    int max_value = MIN_N;

    if (N <= 0) continue;

    for (int n = 0; n < N; ++n) {
        int v = read_an_integer(f);
        if (v > max_value)
             max_value = v;
    }

    printf("Max %d\n", max_value);
}
close_my_file(f);

我将文件处理和I / O作为练习 - 但请确保您处理所有错误条件(在这种情况下,调用exit(-1)可能就足够了。)