Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我的程序不返回文本文件的最大和最小整数?_C_File_Debugging - Fatal编程技术网

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

C 为什么我的程序不返回文本文件的最大和最小整数?,c,file,debugging,C,File,Debugging,这是我的密码。每次运行它时,当我将INT_MAX分配给min时,它都会给我“Thread 1:breakpoint 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"

这是我的密码。每次运行它时,当我将INT_MAX分配给min时,它都会给我“Thread 1:breakpoint 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;
}
#包括
#包括
#包括
int main(){
int i,最小值,最大值;
min=INT_MAX;
max=INT_MIN;
文件*fp;
fp=fopen(“in.txt”,“r”);
while(fscanf(fp、%d、&i)!=EOF){
如果(imax)
max=i;
}
fprintf(fp,“%d%d”,最小值,最大值);
fclose(fp);
返回0;
}

断点似乎与源代码中指定行的任何内容都不相关,可能是调试器设置并记住的断点

您的程序无法生成预期的输出,因为您试图将输出结果改为文件而不是标准输出:

fprintf(fp, "%d %d", min, max);
只需将此行更改为:

printf("%d %d\n", 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);
}
intn;
而((n=fscanf(fp、%d、&i))!=EOF){
如果(n==1){
如果(imax)
max=i;
}
}
getc(fp);
}
尝试更改:

fprintf(fp, "%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;
}
#包括
#包括
#包括
int main(){
int i,最小值,最大值;
min=INT_MAX;
max=INT_MIN;
文件*fp;
fp=fopen(“in.txt”,“r”);
while(fscanf(fp、%d、&i)!=EOF){
如果(imax)
max=i;
}
fclose(fp);
fp=fopen(“in.txt”,“a”);
fprintf(fp,“%d%d”,最小值,最大值);
fclose(fp);
返回0;
}

听起来像是在IDE中设置了断点。听起来与代码无关。你用的是什么IDE?您是否可以查看是否有意外设置的断点?循环条件应为
while(fscanf(fp,“%d”,&i)==1)
fscanf
在失败时可能返回
0
EOF
。另一种可能是文件无法打开,调试信息不太正确;如果(!fp)退出(退出失败),则执行
while
循环之前
#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;
}