C编程中的真或假条件

时间:2015-02-12 12:49:33

标签: c

我的任务是创建一个密码判断程序,它将确定我输入的密码是否强大。我无法弄清楚如何将标准设置为真。

以下是标准。

它应该至少有八(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。

3 个答案:

答案 0 :(得分:3)

有几件事。

首先,声明一个能说明密码是否强大的函数。你应该能够将一个字符串传递给函数,它将返回一个答案 告诉你密码是否很强。

然后你可以在条件更详细的情况下查看更少的干扰,比如那些在旧代码中没有充分理由的所有内容中的额外循环变量i

您的情况问题变得非常简单:它们都是“倒置的”。也就是说,当您看到一个数字时,会检查标准crit2,但您执行检查crit3和{{ 1}}。 所以现在如果你看到一个小写或大写字母,你会 勾选crit4(并冗余地检查另一个标准) 你会在最后说“强”。

所以给你的变量名称说明他们做了什么。 从不crit2crit1等。也许是crit2is_long_enough等。当你写has_digit时,至少你有一个直接的线索,你应该看一个数字。 那么当is_digit = 1为真时,你就不太可能犯下愚蠢的错误,就像设置这个标准一样,因为这与 你试图满足的条件。

在这里你也有一些未初始化的数组,正如其他人所观察到的那样,但如果你接受建议写一个函数来判断一个密码是否很强,并为每个密码调用一次该函数,那么你的四个数组就会消失从代码。它们被函数内部的四个变量所取代,只需要指示一个密码的强度(此时函数正在处理的密码)。请记住,当你声明它时,每个变量都会获得一个初始化器,为每个变量选择一个明显的初始化器,你就可以了。

答案 1 :(得分:1)

正如许多其他人所说,你有一个明确的未初始化数组问题,但是在初始化的内存中你很难找到&#34;那些&#34;。错误结果的实际来源是您不应该否定您的条件,例如:!islower(string[i][j])应该只是islower(string[i][j])

答案 2 :(得分:0)

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

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