繁体   English   中英

C编程中的真假条件

[英]True or false condition in C programming

我的任务是创建一个密码判断程序,该程序将确定我输入的密码是否强。 我不知道如何将标准设置为true。

这是标准。

它应至少包含八(8)个字符。 它应至少包含一(1)个数字。 它应至少包含一(1)个小写字母。 它应至少包含一(1)个大写字母。

这就是我到目前为止所做的。

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define T 100
#define MAX 255

int main(){
    char string[T][MAX];
    int t;
    int i, j;
    int crit1[T], crit2[T], crit3[T], crit4[T];

    scanf("%d", &t);
    getchar();
    for (i=0; i<t; i++){
        fgets(string[i], sizeof(string[i]), stdin);
        if(strlen(string[i])>=8)
                crit1[i]=1;
    }

    for (i=0; i<t; i++){
        for(j=0; j<strlen(string[i]); j++){
            if(!isdigit(string[i][j])){
                crit2[i]=1;
                }
            if(!islower(string[i][j])){
                crit3[i]=1;
                }
            if(!isupper(string[i][j])){
                crit4[i]=1;
                }
        }
    }

    for (i=0; i<t; i++){
        if (crit1[i]==1 && crit2[i]==1 && crit3[i]==1 && crit4[i]==1)
        printf("Case #%d: STRONG\n", i+1);

        else
        printf("Case #%d: NOT STRONG\n", i+1);
    }

    return 0;
}

如果我在第一种情况下输入“ password123”,在第二种情况下输入“ Password123”。 当程序仅应识别第二种情况STRONG而第一种情况应输出NOT STRONG时,程序将在两种情况下都输出STRONG。

几件事。

首先,声明一个函数,说明密码是否强。 您应该能够将字符串传递到函数中,并且它将返回一个答案,告诉您密码是否强壮。

然后,您可以在分散注意力较少的情况下详细查看条件,例如多余的循环变量i毫无用处地出现在所有旧代码中。

您的条件存在的问题非常简单:它们都是“倒置的”。 也就是说,当您看到一个数字时,您不会检查标准crit2 ,但是检查crit3crit4 因此,现在如果您看到小写或大写字母,您将选中crit2 (并多余地检查另一个条件),最后将说“ strong”。

因此,给您的变量名称说明它们的作用。 永远不要crit1crit2等。 也许是is_long_enoughhas_digit等。这样,当您编写is_digit = 1 ,至少可以立即得到一个提示,您应该查看一个数字。 然后,您不太可能犯傻的错误,例如当!isdigit(c)为true时将此标准设置为true,因为这与您要满足的条件完全相反。

正如其他人所观察到的,这里也有一些未初始化的数组,但是如果您建议编写一个函数来判断单个密码是否强壮,并为每个密码调用一次该函数,那么您的四个数组就会从代码中消失。 它们由函数内的四个变量代替,这些变量仅需指示一个密码的强度(该函数当前正在使用该密码)。 只要记住,每个变量在声明它时都会得到一个初始化器,为每个变量选择明显的初始化器,一切都会好起来的。

正如许多其他人所述,您显然有一个未初始化的数组问题,但是在该已初始化的内存中找到“ 1”的可能性很小。 错误结果的实际来源是您不应该否定条件,例如: !islower(string[i][j])应该只是islower(string[i][j])

您将必须初始化crit1 [],crit2 []等。 到0。

for (i=0; i<T; i++)
  crit1[i] = crit2[i] = crit3[i] = crit4[i] = 0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM