C:将多个区域读入数组并找到最大值

时间:2015-04-25 12:47:10

标签: c arrays loops

我试图找到数组中的最大值。我给了一组区域(输入),现在是:

4.5
19.59
1.92

需要使用scanf将这些区域读入数组,然后从那里我需要找到该数组中的最大值(区域)。还应该知道,最多只能有100个区域可以读入阵列。所以稍后我可能需要读入数组中的5或20或99等...

如果有人能帮我一把,我会非常感激,我是编程的新手,并不知道从哪里开始。

2 个答案:

答案 0 :(得分:1)

#include <stdio.h>
#include <ctype.h>

int main(void){
    double v, max_v = 0.0, array[100];
    int i = 0, n, state;

    while(i < 100){
        if(EOF == (state = scanf("%lf", &v)))
            break;
        else {
            int ch, invalid = 0;
            while((ch = fgetc(stdin))!='\n' && ch != EOF){
                if(!isspace(ch))
                    invalid = 1;
            }
            if(invalid || v < 0)
                printf("invalid!\n");//skip
            else {
                array[i++] = v;
                if(max_v < v)
                    max_v = v;
            }
        }
    }
    n = i;
    for(i = 0; i < n; ++i){
        printf("%f\n", array[i]);
    }
    printf("Largest area = %f\n", max_v);

    return 0;
}

答案 1 :(得分:0)

您在评论中说过,数据是从文件重定向的。你还说你需要找到最大的价值。在这种情况下,EOF是用于表示输入结束的指示。此外,您不需要存储所有值。

您需要逐个读取值,只存储最大值。请参阅以下代码:

FILE* fp = fopen(FILENAME,"r");
if(fp == NULL)
   Handle_error(); // or exit(0);

double largest=0,temp;
while( (fscanf(fp, "%lf", &temp) == 1)
{
    if( temp > largest)
        largest = temp;
}

printf("Largest area = %f" , largest);

while循环将中断
  1. 遇到文件结尾(EOF
  2. 找到任何无效数据(如字符)