为什么我的程序没有返回文本文件的最大和最小整数?

时间:2015-06-04 23:39:41

标签: c file debugging

这是我的代码。每次运行它时,当我将INT_MAX分配给min时,它会给我“线程1:断点1.1”。

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main() {
    int i, min, max;
    min = INT_MAX;
    max = INT_MIN;
    FILE* fp;
    fp = fopen("in.txt", "r");
    while (fscanf(fp, "%d", &i) != EOF) {
        if (i < min)
            min = i;
        if (i > max)
            max = i;
    }
    fprintf(fp, "%d %d", min, max);
    fclose(fp);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

断点在指定行的源代码中似乎没有任何关联,可能是调试器设置并记住的断点。

您的程序没有产生预期的输出,因为您尝试输出到文件而不是stdout

fprintf(fp, "%d %d", min, max);

只需将此行更改为:

printf("%d %d\n", min, max);

请注意,还有另一个问题:如果文件包含既不是数字也不是空白字符的任何字符,fscanf(fp, "%d", &i)将继续返回0而不从输入流中使用此字符。更糟糕的是,如果i返回fscanf(),则不会修改0

您应该以这种方式更改主循环:

int n;

while ((n = fscanf(fp, "%d", &i)) != EOF) {
    if (n == 1) {
        if (i < min)
            min = i;
        if (i > max)
            max = i;
        }
    }
    getc(fp);
}

答案 1 :(得分:1)

尝试更改:

fprintf(fp, "%d %d", min, max);

使用:

printf("%d %d", min, max);

看看终端上的打印件,是否有正确的数字? (我认为答案是肯定的。)

如果您想要打印文件末尾的数字,请使用以下代码:

#include <stdio.h>
#include <stdlib.h>
#include <limits.h>

int main() {
    int i, min, max;
    min = INT_MAX;
    max = INT_MIN;
    FILE* fp;
    fp = fopen("in.txt", "r");
    while (fscanf(fp, "%d", &i) != EOF) {
        if (i < min)
            min = i;
        if (i > max)
            max = i;
    }
    fclose(fp);


    fp = fopen("in.txt", "a");
    fprintf(fp, "%d %d", min, max);
    fclose(fp);
    return 0;
}