我正在尝试编写一个简单的程序,它从数据文件中读取整数并输出最小值和最大值。输入文件的第一个整数将指示将读取多少个整数,然后将列出整数。
我的程序编译没有任何问题,但是,它返回的值不是我的测试数据文件中的集合的一部分。任何人都可以帮助诊断这个问题吗?
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);}
答案 0 :(得分:5)
以下是您的代码中的几个错误。
首先,正如cnicutar所说,在i
的循环中将num
更改为fscanf
。这样您就可以正确读取输入。左括号{
应位于for
循环之后。
for (i = 0; i < count; i++) { // put the { here
fscanf( fp, "%d", &num);
其次,您的min
和max
未正确启动。您应该将其更改为INT_MAX
和INT_MIN
。并#include <limits.h>
。
#include <stdio.h>
#include <limits.h>
......
int min = INT_MAX;
int max = INT_MIN;
答案 1 :(得分:2)
除了半自动的更改之外,您还需要将min初始化为一些任意大的值,以便至少有一个输入数小于该值。否则,如果您的输入值都是正数,则最终会显示最小值为零。甚至比任意大的初始值更好的是使用条件逻辑来检测第一次循环并将min和max设置为输入流中的第一个实数值。这避免了开始最小值有多大的困境(以及开始最大值有多小,我没有提到,但基本上是反问题)。
答案 2 :(得分: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);}
答案 3 :(得分: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];
}
}