学编程的盆子 发表于 2021-3-11 12:05:53

求助大佬们一个fscanf()有关的问题

#include<stdio.h>
#include<stdlib.h>

typedef struct date
{
    int day;
    int month;
    int year;
};//结构体名的定义 自定义类型符

typedef struct student
{
    int num;
    char name;
    struct date birthday;

}studnet;
struct student *pstu;
student stu;
pstu = &stu;



void FindByNum()
{
    FILE *fp;
    int num;
    int find = 0;
    printf("按学号查找数据:");
    fp = fopen("C:\\Users\\yyp\\Desktop\\t4.txt","r+");
    if(fp == 0)
    {
      printf("Error!\n");
      exit(0);
    }
    else
    {
      printf("请输入学号:\n");
      scanf("%d",&num);
    }
    while(!feof(fp))
    {
      fscanf(fp,"%d%s%d%d%d\n",&pstu->num,pstu->name,&pstu->birthday.year,&pstu->birthday.month,&pstu->birthday.day);
      if(num == pstu->num)
      {
            printf("学号:%d\n",pstu->num);
            printf("名字:%s\n",pstu->name);
            printf("生日:%d-%d-%d\n",pstu->birthday.year,pstu->birthday.month,pstu->birthday.day);
            printf("\n");
            find = 1;
      }
    }
    if(!find)
    {
      printf("查无此人!\n");
    }
    fclose(fp);


}


代码如上,不明白的地方就是输入了一个学号之后,因为有个!feof(fp),所以fscanf()会持续执行到文件最后,也就是把所有的数据存储到结构体之中,

那找的话应该是怎么操作?下面再判断if ,加入输入的学号存在相等,那么输出的怎么保证是对应这个学号的信息呢。这里是书上的一个学生信息系统,有点懵

jackz007 发表于 2021-3-11 12:31:55

         这个文件是分行的,每行一个记录,fscanf() 会每次一行地逐行读取文件数据,当这个条件
      if(num == pstu->num)
         得到满足的时候,那么,就足以肯定,这条记录一定是这个学号学生的信息。

学编程的盆子 发表于 2021-3-11 17:49:52

jackz007 发表于 2021-3-11 12:31
这个文件是分行的,每行一个记录,fscanf() 会每次一行地逐行读取文件数据,当这个条件

       ...

fscanf不应该是把数据存储到结构体之中吗?那根据while代码,不是所有的都存储完毕,才执行if语句吗,我是这样想的

547658697 发表于 2021-3-11 18:22:27

while(!feof(fp))
    {
      fscanf(fp,"%d%s%d%d%d\n",&pstu->num,pstu->name,&pstu->birthday.year,&pstu->birthday.month,&pstu->birthday.day);
      if(num == pstu->num)
      {
            printf("学号:%d\n",pstu->num);
            printf("名字:%s\n",pstu->name);
            printf("生日:%d-%d-%d\n",pstu->birthday.year,pstu->birthday.month,pstu->birthday.day);
            printf("\n");
            find = 1;
      }
    }

fscanf遇到空格和换行结束 ,所以指挥读取到一名学生的信息

学编程的盆子 发表于 2021-3-11 19:53:16

547658697 发表于 2021-3-11 18:22
fscanf遇到空格和换行结束 ,所以指挥读取到一名学生的信息

所以这就是那个换行符的作用吗
页: [1]
查看完整版本: 求助大佬们一个fscanf()有关的问题