为什么程序不写入文件?

时间:2014-04-21 02:56:37

标签: c file-io eof

当我查看这段代码时,我看不出它有什么问题,但显然有。

它的作用:

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

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

每行一个数字如下:

  

1

     

23

     

45

     

56

     

78

它正确打开了三个文件但似乎没有在输出文件中写入任何内容。

为什么会这样?

(我为结构严密的代码道歉。)

#include <stdio.h>
#include <stdlib.h>

int main ( int argc, char **argv) {

FILE *source_file_one;
FILE *source_file_two;
FILE *destination_file;
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");
destination_file = fopen(argv[3], "w");

if(argc != 4)
    printf("Useage: mergeSort <source_file_1> <source_file_2> <destination_file>\n");

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

while(!feof(source_file_one)) {
    while(!feof(source_file_two)) {
    fscanf(source_file_one, "%d", &source_file_one_input);
    fscanf(source_file_two, "%d", &source_file_two_input);

        if(source_file_one_input > source_file_two_input) {
        fprintf(destination_file, "%d", source_file_two_input); 
        }
        else fprintf(destination_file, "%d", source_file_one_input);
    }
}

fclose(source_file_one);
fclose(source_file_two);
fclose(destination_file);

}

2 个答案:

答案 0 :(得分:4)

您的程序存在严重的逻辑问题,但是您没有获得任何输出的原因是缺少大括号。如果没有大括号,您的程序只会点击第一个exit(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);
}

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

答案 1 :(得分:0)

  • 首先,您的程序存在严重的逻辑错误。声明&#39;如果&#39;是错的。当程序执行&#39; if(source_file_one == NULL)&#39;时,执行&#39;退出(1)的下一步;&#39;

  • 第二,实现了比较排序整数并将较小的整数放入输出文件的实现过程&#39;是错的。

建议:您可以逐行读取文件到两个数组,然后比较两个数组。通过这样做,你可以说清楚。

希望它可以帮助你。