0

我正在尝试编写一个简单的程序,它从数据文件中读取整数并输出最小值和最大值。输入文件的第一个整数将指示将读取多少个整数,然后将列出整数。

我的程序编译没有任何问题,但是,它返回的值不属于我的测试数据文件中的集合的一部分。任何人都可以帮助诊断这个问题吗?

int main(){
FILE *fp = fopen("data.txt", "r");
int count;
int num;
int i;
int min = 0;
int max = 0;

fscanf (fp, "%d", &count);

for (i = 0; i < count; i++)
    fscanf( fp, "%d", &i);  
    {   
    if (num < min)
        min = num;
    if (num > max)
        max = num;
    }
fclose (fp);

printf("Of the %d integers, the minimum value is %d and the maximum value is %d \n", count, min, max);} 
4

4 回答 4

5

这是您的代码中的几个错误。

首先,如 cnicutar 所说,更改inumin the loop 。fscanf这样您就可以正确读取输入。左括号{应该在for循环之后。

for (i = 0; i < count; i++)  {   // put the { here
    fscanf( fp, "%d", &num);

其次,您的minandmax没有正确启动。您应该将它们更改为INT_MAXand INT_MIN。和#include <limits.h>

#include <stdio.h>
#include <limits.h>
......
int min = INT_MAX;
int max = INT_MIN;
于 2012-09-25T03:47:14.283 回答
2

除了 halfelf 的更改之外,您还需要将 min 初始化为任意大的值,以便至少有一个输入数字小于该值。否则,如果您的输入值都是正数,您最终将显示一个最小值为零。比任意大的初始值更好的是使用条件逻辑来检测第一次通过循环并将最小值和最大值设置为输入流中的第一个实际值。这避免了围绕最小开始有多大(以及开始最大有多小,我没有提到但基本上是逆问题)的困境。

于 2012-09-25T03:48:19.357 回答
0
int min=0;
int max=0;
int n = sizeof(arr);
for (int i=0;i<n;i++)
{
   if (i==0){ 
     min=arr[i];
     max=arr[i];
   }
   else{
     if (arr[i]<min) min=arr[i];
     if (arr[i]>max) max=arr[i];
   }

}
于 2014-09-20T07:48:19.000 回答
0

您的num变量为空且未被使用。您正在将其与max和进行比较min。因此max,并且min将存储num. 像这样做:

int main(){
FILE *fp = fopen("data.txt", "r");
int count=0;
int i;
int min = 0;
int max = 0;
while (!feof(fp))
{
count++;
fscanf( fp, "%d", &i);
if (i < min)
min = i;
if (i > max)
max = i;
}
printf("Of the %d integers, the minimum value is %d and the maximum value is %d \n", count, min, max);}
于 2012-09-25T03:53:30.727 回答