C 查找最小值和最大值

C 查找最小值和最大值,c,max,min,C,Max,Min,我正在尝试编写一个简单的程序,从数据文件中读取整数并输出最小值和最大值。输入文件的第一个整数将指示还要读取多少个整数,然后将列出这些整数 我的程序编译没有任何问题,但是,它返回的值不是测试数据文件中集合的一部分。有人能帮助诊断这个问题吗 int main(){ FILE *fp = fopen("data.txt", "r"); int count; int num; int i; int min = 0; int max = 0; fscanf (fp, "%d", &count);

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

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

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);} 
intmain(){
文件*fp=fopen(“data.txt”,“r”);
整数计数;
int-num;
int i;
int min=0;
int max=0;
fscanf(fp、%d、&count);
对于(i=0;i最大值)
max=num;
}
fclose(fp);
printf(“在%d个整数中,最小值为%d,最大值为%d”,count,min,max);}

您的代码中有几个错误

首先,如cnicutar所说,在
fscanf
中的循环中将
i
更改为
num
。以便您能够正确读取输入。左括号
{
应该在
for
循环之后

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

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

您的
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);}
intmain(){
文件*fp=fopen(“data.txt”,“r”);
整数计数=0;
int i;
int min=0;
int max=0;
而(!feof(fp))
{
计数++;
fscanf(fp、%d、&i);
如果(imax)
max=i;
}
printf(“在%d个整数中,最小值为%d,最大值为%d”,count,min,max);}
int min=0;
int max=0;
int n=尺寸(arr);

对于(int i=0;i
min
可能应该是
int_MAX
,而
MAX
可能应该是
int_min
。这样你就不需要大于或小于0的值来更改它。事实上,一个充满正数的文件的最小值为0。你的数据集是什么?当前输出是什么?就像@chris说的,因为你的最小值已经从0开始,如果数据文件没有负数,则将打印出0。如果文件中充满负数,则与最大值存在类似的问题。您甚至没有花一点时间查看代码是否存在明显错误,例如您正在将数字读入循环计数器
i
而不是
num
。也不需要花太多的精力来确定
{
的位置是否完全错误,也不可能是从0开始的最小值和最大值都是正确的。如果你希望编写可用的程序,你需要养成更好的习惯。好吧,我现在得到了一个正确的最小值,但我的最大值仍然很差(我的测试数据集的最大值是58,我的输出为2147383647)。我的代码没有什么奇怪的。那么,整个测试数据是什么?在我的机器上运行良好。再次检查您的代码。您是否已全部更正错误?@user01“我的测试数据集的最大值是58,我的输出为2147383647”--这是因为您设置了max=INT\u max而不是INT\u MIN。编程需要谨慎和精确。
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);}
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];
   }

}