C 为什么程序不写入文件?

C 为什么程序不写入文件?,c,file-io,eof,C,File Io,Eof,当我看这段代码时,我没有看到它有任何错误,但显然有 它的作用是: 逐行读取两个文件,比较排序后的整数并将较小的整数放入输出文件,然后读取下一个较小的整数并将其放入文件 它是两个只包含数字的排序列表的合并排序 每行一个数字,如下所示: 一, 二十三 45 56 78 它正确地打开了三个文件,但似乎没有向输出文件写入任何内容 为什么会这样 (我为我糟糕的代码结构道歉。) #包括 #包括 int main(int argc,字符**argv){ 文件*源文件\一个; 文件*源文件二; 文件*目的地文件

当我看这段代码时,我没有看到它有任何错误,但显然有

它的作用是:

逐行读取两个文件,比较排序后的整数并将较小的整数放入输出文件,然后读取下一个较小的整数并将其放入文件

它是两个只包含数字的排序列表的合并排序

每行一个数字,如下所示:

一,

二十三

45

56

78

它正确地打开了三个文件,但似乎没有向输出文件写入任何内容

为什么会这样

(我为我糟糕的代码结构道歉。)

#包括
#包括
int main(int argc,字符**argv){
文件*源文件\一个;
文件*源文件二;
文件*目的地文件;
int source_file_one_input=0;
int source_file_two_input=0;
source_file_one=fopen(argv[1],“rb”);
source_file_two=fopen(argv[2],“rb”);
目的地_文件=fopen(argv[3],“w”);
如果(argc!=4)
printf(“使用:合并排序\n”);
if(源文件=NULL)
printf(“无法打开文件一:%s\n”,argv[1]);
出口(1);
if(源文件=NULL)
printf(“无法打开文件二:%s\n”,argv[2]);
出口(1);
而(!feof(源文件之一)){
而(!feof(源文件){
fscanf(源文件一、%d、&源文件一输入);
fscanf(源文件二、%d、&源文件二输入);
if(源文件输入>源文件输入){
fprintf(目标文件“%d”,源文件两个输入);
}
else fprintf(目标文件“%d”,源文件一个输入);
}
}
fclose(源文件);
fclose(源文件二);
fclose(目的地文件);
}

您的程序存在严重的逻辑问题,但无法获得任何输出的原因是缺少大括号。没有大括号,您的程序只需点击第一个
退出(1)
就退出了

if(argc != 4) {
    printf("Useage: mergeSort <source_file_1> <source_file_2> <destination_file>\n");
    exit(1);
}
if(source_file_one == NULL) {
    printf("Unable to open file one:  %s\n", argv[1]);
    exit(1);
}
if(source_file_two == NULL) {
    printf("Unable to open file two: %s\n", argv[2]);
    exit(1);
}
if(argc!=4){
printf(“使用:合并排序\n”);
出口(1);
}
if(源文件=NULL){
printf(“无法打开文件一:%s\n”,argv[1]);
出口(1);
}
if(源文件=NULL){
printf(“无法打开文件二:%s\n”,argv[2]);
出口(1);
}

作为修复逻辑问题的提示,您不需要嵌套循环

您的程序存在严重的逻辑问题,但无法获得任何输出的原因是缺少大括号。没有大括号,您的程序只需点击第一个
退出(1)
就退出了

if(argc != 4) {
    printf("Useage: mergeSort <source_file_1> <source_file_2> <destination_file>\n");
    exit(1);
}
if(source_file_one == NULL) {
    printf("Unable to open file one:  %s\n", argv[1]);
    exit(1);
}
if(source_file_two == NULL) {
    printf("Unable to open file two: %s\n", argv[2]);
    exit(1);
}
if(argc!=4){
printf(“使用:合并排序\n”);
出口(1);
}
if(源文件=NULL){
printf(“无法打开文件一:%s\n”,argv[1]);
出口(1);
}
if(源文件=NULL){
printf(“无法打开文件二:%s\n”,argv[2]);
出口(1);
}
作为修复逻辑问题的提示,您不需要嵌套循环

  • 首先,您的程序有严重的逻辑错误。“如果”的说法是错误的。当程序执行“if(source_file_one==NULL)”时,下一步执行“exit(1);”

  • 其次,“比较排序后的整数并将较小的整数放入输出文件”的实现过程是错误的

建议:您可以逐行读取两个数组中的文件,然后比较两个数组。通过这样做,你可以把事情弄清楚

希望它能帮助您。

  • 首先,您的程序有严重的逻辑错误。“如果”的说法是错误的。当程序执行“if(source_file_one==NULL)”时,下一步执行“exit(1);”

  • 其次,“比较排序后的整数并将较小的整数放入输出文件”的实现过程是错误的

建议:您可以逐行读取两个数组中的文件,然后比较两个数组。通过这样做,你可以把事情弄清楚


希望它能帮助您。

您输入的文件是真正的二进制文件还是纯文本文件?也许您还应该测试“destination_file”,看看fopen后是否为NULL?此代码在逻辑上不会执行合并排序的合并操作。考虑一下如果一个列表是11111,另一个是2222,会发生什么情况。注意:将
“rb”
更改为
“r”
。注意:不要使用
feof()
,使用
while(fscanf(source\u file\u one,“%d”,“source\u file\u one\u input)==1和&fscanf(source\u file\u two,“%d”,“source\u file\u input)==1){
您输入的文件是真正的二进制文件还是纯文本文件?也许您还应该测试'destination_file'以查看它在fopen之后是否为NULL?此代码在逻辑上不会执行合并排序的合并操作。请考虑如果一个列表为11111,另一个列表为2222会发生什么。注意:将
“rb”
更改为
“r”
。注意:不要使用
feof()
,使用
while(fscanf(source\u file\u one,”%d“,&source\u file\u one\u input)==1和&fscanf(source\u file\u two,”%d“,&source\u file\u two\u input)==1){