我用 C 语言编写了一个程序,让用户输入密码以让他进入系统。我正在使用方法 fgets。正确的密码是“letmein”。这是代码:
现在我要验证用户通过stdin输入的密码不超过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. */
}
}