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



这是我的代码。每次我运行它时,当我将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;
}

尝试更改:

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;
}

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

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

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

把这一行改成:

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

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

你应该这样修改主循环:

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

相关内容

  • 没有找到相关文章

最新更新