2013-11-27 45 views
-4

在我的项目中,我必须用整数读取两个文件,并将它们按升序组合成一个输出文件。这件事我真的很难过。 这是我写的一些片段代码,但它不起作用。顺便说一句,我不能使用数组。C编程项目

firstNext = fgetc(input); 
secondNext = fgetc(second_input); 

fscanf(second_input, "%d", &secondNumber); 
fscanf(input, "%d", &firstNumber);    

while(firstNext != EOF && secondNext != EOF) 
{ 
    if(firstNumber < secondNumber) 
    { 
     fprintf(output, "%d\n", firstNumber); 
     fscanf(input, "%d", &firstNumber); 
     firstNext = fgetc(input); 
    } 

    if(secondNumber < firstNumber) 
    { 
     fprintf(output, "%d\n", secondNumber); 
     fscanf(second_input, "%d", &secondNumber); 
     secondNext = fgetc(second_input); 
    } 
... 
} 

采样输入和输出

File1 
1 
5 
10 
15 

File2 
2 
4 
6 
8 

Output 
1 
2 
4 
5 
6 
8 
10 
15 
+0

我编辑根据我的理解与样品的输入和输出的问题。如果错误请纠正。 –

+1

你的标题很糟糕。 – Maroun

+0

你的问题是什么? –

回答

0

在这里你去:

#include <stdio.h> 

int main(void) 
{ 
    FILE *input; 
    FILE *second_input; 
    int firstNumber; 
    int secondNumber; 

    input = fopen("file1", "r"); 
    second_input = fopen("file2", "r"); 

    fscanf(input, "%d", &firstNumber); 
    fscanf(second_input, "%d", &secondNumber); 

    while(!feof(input) || !feof(second_input)) 
    { 
     if(firstNumber < secondNumber || feof(second_input)) 
     { 
      printf("%d\n", firstNumber); 
      if(!feof(input)) 
      { 
       fscanf(input, "%d", &firstNumber); 
      } 
     } 
     else 
     { 
      printf("%d\n", secondNumber); 
      if(!feof(second_input)) 
      { 
       fscanf(second_input, "%d", &secondNumber); 
      } 
     } 

     if(feof(input) && !feof(second_input)) 
     { 
      printf("%d\n", secondNumber); 
      fscanf(second_input, "%d", &secondNumber); 
     } 
    } 

    fclose(input); 
    fclose(second_input); 
} 
+0

非常感谢!尽管如此,它不会打印剩余文件中的最终值,但我想我可以从这里找出它。 – magve

0

如果你想获得一个升序排序的所有数字的名单到输出文件,那么你或许应该尝试读取两个列表成为单独的阵列,对它们进行单独排序,然后将两个排序列表合并到一个数组中,然后将此列表写入输出文件。

如果输入文件已经排序,那么一个简单的合并就可以做到这一点。我相信fgetc不会工作。 fgetc从文件中读取单个字符。所以如果这个数字有多个数字,它就会失败。您应该将每行整体读入char[],然后在比较之前使用atoi()或类似函数。

+0

我很感谢您的帮助,但我无法使用阵列 – magve

+0

为什么不使用数组?你能解释一下吗? – jester

+0

这是一个学校项目,我的老师说这个没有数组。 – magve

0
#include <stdio.h> 

int *combine(FILE *f1, FILE *f2){ 
    static int num1, num2; 
    static int f1_stat, f2_stat; 

    if(f1_stat != EOF && f1_stat == 0)//0:used, 1:unused 
     f1_stat = fscanf(f1, "%d", &num1) < 1 ? EOF : 1; 
    if(f2_stat != EOF && f2_stat == 0) 
     f2_stat = fscanf(f2, "%d", &num2) < 1 ? EOF : 1; 
    if(f1_stat == EOF) 
     return (f2_stat == EOF) ? NULL : (f2_stat = 0, &num2); 
    else 
     return (f2_stat == EOF) ? (f1_stat = 0, &num1) : (num1 < num2) ? (f1_stat = 0, &num1) : (f2_stat = 0, &num2); 
} 

int main(){ 
    FILE *file1, *file2, *output; 
    file1 = fopen("file1.txt", "r"); 
    file2 = fopen("file2.txt", "r"); 
    output = fopen("output.txt", "w"); 
    int *num; 
    while(NULL!=(num=combine(file1, file2))){ 
     fprintf(output, "%d\n", *num); 
    } 
    fclose(file1); 
    fclose(file2); 
    fclose(output); 
    return 0; 
}