在c中编程以检查数字和大写字母不起作用

时间:2015-07-23 16:31:56

标签: c

我正在尝试用c编写一个程序来检查输入的输入是否包含一个大写字母和一个数字。如果是这样,它输出输入是好的,如果输入只包含一个大写或只有一个数字或没有它输出它是坏的。但是当我运行代码并输入一个只有一个数字的输入时,它还输出输入是好的。这是我的代码可以任何人指出是什么导致这个?

(5,7)

2 个答案:

答案 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;
}