[英]C - fgets and length of stdin
我已经用C语言编写了一个程序,该程序可以让用户输入密码以允许他进入或不进入系统。 我正在使用方法fgets。 正确的密码是“ letmein”。 这是代码:
现在,我要验证用户通过stdin输入的密码不超过8个字符。 由于程序是(没有空的if语句),因此即使用户输入“ letmein0000000”,也将授予用户访问权限,因为fgets仅获取前七个字符。 现在,如果用户输入“ letmein”,我只想授予其访问权限。 请问该怎么做?
PS我必须使用fgets,因为这是我项目中的要求。
从fgets()
文档中:
最多读取-从给定的文件流中读取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. */
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.