C 如何通过if语句访问用户信息?

C 如何通过if语句访问用户信息?,c,function,if-statement,fgets,C,Function,If Statement,Fgets,我试图通过询问一个用户的姓名,然后向他显示详细信息来访问他的信息。那我该怎么做呢?无论何时我命名,它都不允许我访问,意味着我不被允许访问。我试了很多次,但是没有找到正确的答案 int list_view(char *name, size_t namesize){ printf("For person details, please enter the person name and id card number: \n"); printf("Enter your Name: ")

我试图通过询问一个用户的姓名,然后向他显示详细信息来访问他的信息。那我该怎么做呢?无论何时我命名,它都不允许我访问,意味着我不被允许访问。我试了很多次,但是没有找到正确的答案

int list_view(char *name, size_t namesize){
    printf("For person details, please enter the person name and id card number: \n");
    printf("Enter your Name: ");
    if(!fgets(name, namesize, stdin)){
      printf("No access");
      return 0;
     }
    FILE * fr;
    int one_by_one;
    fr = fopen("/home/bilal/Documents/file.txt", "r");
    for (int i=0; i<8; i++){
        printf("\nHere is your "); 
        while((one_by_one = fgetc(fr)) != EOF && one_by_one != '\n'){
          printf("%c",one_by_one); /*  display on screen*/
        }
    }
    fclose(fr);
  return 0;
}
int列表\u视图(字符*名称、大小\u命名){
printf(“有关人员详细信息,请输入人员姓名和身份证号码:\n”);
printf(“输入您的姓名:”);
如果(!fgets(名称、名称、标准输入)){
printf(“无访问权”);
返回0;
}
文件*fr;
一个接一个的整数;
fr=fopen(“/home/bilal/Documents/file.txt”,“r”);

对于(int i=0;i如果你看我之前对我说你必须写的同一个问题的回答

if(!fgets(dob, dobsize, stdin))

请参阅if

中的“!”字符,假设您的文件的名称和这些名称的详细信息在同一行中,在文件中创建一个简单的按名称搜索,并将其与输入的名称进行比较。假设行大小不超过199个字符(不包括不超过99个字符的名称和一个单词),下面是这是一个可能实现的示例:


我的手册页上写着
fgets(s,size,stream)
“在成功时返回
s
,在错误时返回
NULL
,或者在没有读取字符的情况下返回文件结尾。”所以检查失败是好的,但这似乎与“访问”无关。如何使if语句起作用?这是我的问题。这取决于您想在那里测试什么。您说的“每当我键入true或false name”是什么意思?每当fgets成功(输入名称)时,程序将打印“no access”。也许您应该先测试fgets()的结果查看输入的是一个名称,然后在一个单独的if语句中输入该名称。我输入了这个名称,但它不起作用。我发表了评论,但你没有回应。与其只是回答,不如说你们为什么放弃选项。我的问题有什么问题?什么是“它不起作用”。你需要做的是让你的代码一点一点地工作,首先,promp在做任何文件IO之前,先让用户做一些事情,然后再回显
int list_view(char *name, size_t namesize)
{
    char line[200];
    char name2[100];

    printf("For person details, please enter the person name and id card number: \n");
    printf("Enter your Name: ");

    if (!fgets(name, namesize, stdin)){//read name from stdin
        perror("Error while reading!");
        return 0;
    }
    name[strcspn(name, "\n")] = '\0'; //remove \n

    FILE *fr;

    if(!(fr = fopen("/home/bilal/Documents/file.txt", "r"))){ //always check fopen for errors
      perror("Unable to open file");
      return 0;
    }

    while(fscanf(fr, "%99s", name2) == 1) //search name in the file
    {
        if(!strcmp(name2, name)){ //the name is found print the rest of the line
            if(fscanf(fr, "%199[^\n]", line) == 1){ 
                printf("%s", line);
                fclose(fr);
                return 1;
            }
        }
    }
    fclose(fr);
    return 0;
}