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