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