C程序合并文件没有找到EOF,陷入无限循环!

Bri*_*Bri 1 c algorithm file-io loops programming-languages

我正在尝试运行这个程序时遇到一些问题我正在研究......要求说我不允许使用排序功能......我自己做了些事......等等.

差不多,程序编译但执行后挂起......我猜它被卡在无限循环中...但我似乎无法找到它...... :(

该程序读取已经被最少订购的数据文件并将它们(有序)合并到第三个.txt文件中......

这两个文件是Data1.txt,Data2.txt包含:

DATA1.TXT

2
2
2
2
Run Code Online (Sandbox Code Playgroud)

Data2.txt

1
3
5
7
9
Run Code Online (Sandbox Code Playgroud)

combine.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;
}
Run Code Online (Sandbox Code Playgroud)

Jac*_*lly 7

你不想比较n != EOF,而是返回值fscanf:

int count_1;
count_1 = fscanf(fpData1, "%i", &m);
if (count_1 == EOF) // EOF (or error)
{
  // ...
}
Run Code Online (Sandbox Code Playgroud)

fscanf也会EOF在错误时返回.如果您需要分开EOF和错误条件,请使用ferror(fpData1),然后查找错误代码(存储在其中errno).