当我看这段代码时,我没有发现任何错误,但显然存在。

它能做什么:

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

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

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

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

}

===============>>#1 票数: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);
}

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

===============>>#2 票数:0

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

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

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

希望它能对您有所帮助。

  ask by Cody Mallery translate from so

未解决问题?本站智能推荐: