当我查看这段代码时,我看不出它有什么问题,但显然有。
它的作用:
逐行读取两个文件,比较排序的整数并将较小的文本放入输出文件中,然后读取并将下一个较小的整数放入文件中。
它是两个仅包含数字的排序列表的合并排序。
每行一个数字如下:
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);
}
答案 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;是错的。
建议:您可以逐行读取文件到两个数组,然后比较两个数组。通过这样做,你可以说清楚。
希望它可以帮助你。