使用C中的fscanf从两个.txt文件中读取,存储在.txt文件中的结构和输出中

时间:2016-02-27 02:43:29

标签: c data-structures

描述:程序从2个文件中读取数据,将它们存储在结构中,询问用户(城市或居住地),如果城市名称与存储在文件中的名称匹配,程序显示输出(学生,国家ID,姓名)和商店在一个文件中。

我的问题是,我写的上述代码不起作用。它给了我一个"没有信息"即使我进入了档案中的城市。

 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
 #define MAX_LEN 20
 #define MAX_LINE 7

typedef struct studentdata
 {
char NATIONAL_ID[20];   
char NAME[20];
char STUDENT_CODE[20];
char CITY[20];
}studentdata;

int main(void)
{
 int i;
 char x=0, CITY[MAX_LEN];  
 studentdata y[MAX_LINE];
 char temp[20];
 char temp1[20];
 char count=0;                                        

FILE *fi = fopen("employee1.txt",  "r");

if (fi == NULL)
{
          printf("error data");
            exit(0);
}
FILE *fp = fopen("student1.txt",  "r");

if (fp == NULL)
{
          printf("error data1");
            exit(1);
}

 i = 0;
printf("Enter city\n");
scanf("%s",CITY);


//i = 0;
    FILE *fa = fopen("student2.txt", "w");
     if (fa == NULL)
{
          printf("error data2");
            exit(2);
}

 while(fscanf(fi, "%s %s %s", y[i].NATIONAL_ID, y[i].NAME, y[i].STUDENT_CODE) == 4) 
                i++; 


count=i;

我确信错误在此循环中,但无法找到它。

  while(fscanf(fp, "%s %s", temp,temp1) == 2)       
   {      

   for(i=0; i< count;i++)
   {

    if (strcmp(y[i].NATIONAL_ID,temp)==0)
     {
       strcpy(y[i].CITY,temp1);        

        if (strcmp(y[i].CITY,CITY)==0)
         {               
            fprintf( "%s\t  %s\t %s\t  %s\t\n",  y[i].NATIONAL_ID, y[i].NAME, y[i].STUDENT_CODE, y[i].CITY);

            x++;    
          }
     }
   }
 }  

 fclose(fa);
if(!x)
{

    printf("no information\n");

}

fclose(fi);
fclose(fp);
 return 0;

}

1 个答案:

答案 0 :(得分:1)

我想说没有任何内容正从文件中读取到第一个while循环中 -

 while(fscanf(fi, "%s %s %s", y[i].NATIONAL_ID, y[i].NAME, y[i].STUDENT_CODE) == 4) 
        i++;

当您匹配3个参数但检查fscanf4的返回时将返回false并且循环不会迭代且i仍为0,因此{ {1}}。

因此,你的内部循环不会运行 -

count

因此您无法获得输出。

将您的循环修改为 -

 for(i=0; i< count;i++)           //count=0 

请注意,发现此问题的一种简单方法是在读取信息时打印信息,或在读取完成后打印数组。