【发布时间】:2011-04-09 13:24:09
【问题描述】:
我在尝试运行我正在开发的这个程序时遇到了一些问题......要求说我不允许使用排序功能......我自己做了一些事情......等等。
差不多,程序编译但执行后挂起......我猜它陷入了无限循环......但我似乎找不到它...... :(
这个程序读取已经按从小到大排序的数据文件,并将它们合并(排序)到第三个 .txt 文件中...
这两个文件是Data1.txt和Data2.txt 包含:
Data1.txt
2
2
2
2
Data2.txt
1
3
5
7
9
结合.c
#include <stdio.h>
#include <stdlib.h>
void sortData(FILE *fpData1, FILE *fpData2)
{
int n, m;
FILE *fpMerge;
fpMerge = fopen("Merge.txt", "w+");
fscanf(fpData2, "%i", &n);
fscanf(fpData1, "%i", &m);
while(n != EOF || m != EOF)
{
if(n == EOF)
{
fscanf(fpData1, "%i", &m);
while(m != EOF)
{
fprintf(fpMerge, "%i\n", m);
fscanf(fpData1, "%i", &m);
}
}
if(m == EOF)
{
fscanf(fpData2, "%i", &n);
while(n != EOF)
{
fprintf(fpMerge, "%i\n", n);
fscanf(fpData2, "%i", &n);
}
}
if(n < m)
{
fprintf(fpMerge, "%i\n", n);
fscanf(fpData2, "%i", &n);
}
if(n > m)
{
fprintf(fpMerge, "%i\n", m);
fscanf(fpData1, "%i", &m);
}
if(n == m)
{
fprintf(fpMerge, "%i\n", n);
fprintf(fpMerge, "%i\n", m);
fscanf(fpData2, "%i", &n);
fscanf(fpData1, "%i", &m);
}
}
fclose(fpMerge);
}
int main (void)
{
FILE *fpData1;
FILE *fpData2;
fpData1 = fopen("Data1.txt", "r");
if(fpData1 == NULL)
{
printf("There was an error opening the file...program terminating..\n");
exit(1);
}
fpData2 = fopen("Data2.txt", "r");
if(fpData2 == NULL)
{
printf("There was an error opening the file...program terminating..\n");
exit(1);
}
sortData(fpData1, fpData2);
fclose(fpData1);
fclose(fpData2);
return 0;
}
【问题讨论】:
-
"...我猜是..." 您是否附加了一个调试器来查看您的程序在做什么?您是否尝试过添加一些适当的调试输出语句(使用
printf)来查看哪里出错了? -
我添加了一些 printf,似乎程序没有在文件中移动...它停留在第一个数字并且永远存在...有没有更好的方法来移动指针...因为我真的不确定......我之前用 fscanf 做过我没有看到我做错了什么......
标签: c algorithm programming-languages file-io loops