我正在尝试用c编写一个程序来检查输入的输入是否包含一个大写字母和一个数字。如果是这样,它输出输入是好的,如果输入只包含一个大写或只有一个数字或没有它输出它是坏的。但是当我运行代码并输入一个只有一个数字的输入时,它还输出输入是好的。这是我的代码可以任何人指出是什么导致这个?
(5,7)
答案 0 :(得分:1)
您正在将char pass [100]
分配为自动本地变量。这意味着它将被放置在函数的堆栈框架中。以这种方式分配的变量不会初始化为任何特定值,其内容未定义。
如果您输入密码'test',您将拥有
pass[0] == 't'
pass[1] == 'e'
pass[2] == 's'
pass[3] == 't'
pass[4] == '\0'
pass[5] == ????
pass[5]
可以是任何值,包括大写或数字。你的'for'循环正在读取这些未初始化的值并给出错误的结果。
要解决这个问题,请将for循环停止,当它点击'\ 0'或'null'字符时。
for(i=0;pass[i]!='\0';i++)
如果密码太长,此代码将泄露安全漏洞。
答案 1 :(得分:0)
校正的
#include <stdio.h>
#include <ctype.h>
int main() {
int uppercase = 0, digit = 0, i;
char pass[100];
printf("Please input a password\n");
scanf("%s", pass);
for (i = 0; pass[i]; ++i) {
if (isupper(pass[i])) uppercase = 1;
if (isdigit(pass[i])) digit = 1;
}
if (uppercase && digit) printf("Your password is good!");
else printf("Your password sucks");
return 0;
}