首页 > 解决方案 > 为什么我不能比较文件中的那些数组并且我读取这些数组以创建登录系统?

问题描述

strcmp()功能不工作。我从控制台读取的用户名与文件中的用户名不匹配。所以,输出是错误的id。解决办法是什么?

  #include<stdio.h>       
  #include<stdlib.h>        
  #include<string.h>       
  int main()         
  {    
   FILE *pass;     
   char str[100],str2[100];     
   char id[100],pw[100];        
   pass=fopen("password.txt","r");         
   printf("ENTER USER NAME AND PASSWORD:\n");        
   printf("USERNAME: ");       
   gets(id);            
   printf("\nPASSWORD: ");         
   gets(pw);       
   while(fgets(str,100,pass)!=NULL);            
   {        
    fgets(str2,100,pass);      
    if(strcmp(id,str)==0)       
    {       
      if(strcmp(pw,str2)==0)         
      {       
        printf("ACCEPTED\n");            
      }       
      else       
      {        
        printf("wrong password");          
       }        
   }        
   else         
    {          
      printf("wrong id");           
    }           
    }    
    fclose(pass);    
   }          

标签: cstringnewlinefgets

解决方案


首先,永远不要使用gets(),永远使用fgets()

也就是说fgets(),读取尾随换行符并将其存储到目标缓冲区中。

来自C11,第 7.21.7.2 章

fgets函数最多从stream指向的流中读取比n指定的字符数少一个的字符到s指向的数组中。在换行符(保留)之后或文件结尾之后不会读取其他字符。在读入数组的最后一个字符之后立即写入一个空字符。

在使用扫描的值之前,您应该摆脱该换行符。这是实现这一目标的一种方法


推荐阅读