我用C编写了一个程序,让用户输入密码让他进入系统.我正在使用fgets方法.正确的密码是"letmein".这是代码:
现在我想验证通过标准输入用户输入的密码是超过8个字符.作为该计划是(无空if语句),用户被授予访问权限,即使他进入"letmein0000000",因为只有前七个字符由与fgets取出.现在,我只希望,如果他进入"letmein"授予访问权限的用户.怎么可以这样做呢?
PS我必须使用fgets,因为它是我项目中的一项要求.
从文档fgets():
读取最多count - 来自给定文件流的1个字符并将它们存储在str中.生成的字符串始终以NULL结尾.如果发生文件结束或找到换行符,则解析将停止,在这种情况下,str将包含该换行符.
请求读取最多8字符(这意味着9作为第二个参数传递).如果用户输入的7字符多于字符,则可以捕获它.告知用户失败并跳过剩下的内容stdin.如果用户正确输入7并点击返回fgets()将停止在换行符处.
检查返回值fgets()以确保代码不会尝试处理单元化缓冲区.
例如:
char password[9];
if (fgets(password, 9, stdin))
{
/* Strip new-line if present. */
char* nl = strchr(password, '\n');
if (nl) *nl = 0;
if (strlen(password) > 7)
{
/* Password too long.
Skip remaining input if necessary. */
int c;
while ((c = fgetc(stdin)) != EOF && c != '\n');
}
else if (0 == strcmp("letmein", password))
{
/* Good password. */
}
else
{
/* Incorrect password. */
}
}
Run Code Online (Sandbox Code Playgroud)