描述:程序从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;
}
答案 0 :(得分:1)
我想说没有任何内容正从文件中读取到第一个while循环中 -
while(fscanf(fi, "%s %s %s", y[i].NATIONAL_ID, y[i].NAME, y[i].STUDENT_CODE) == 4)
i++;
当您匹配3个参数但检查fscanf
对4
的返回时将返回false并且循环不会迭代且i
仍为0
,因此{ {1}}。
因此,你的内部循环不会运行 -
count
因此您无法获得输出。
将您的循环修改为 -
for(i=0; i< count;i++) //count=0
请注意,发现此问题的一种简单方法是在读取信息时打印信息,或在读取完成后打印数组。