当前位置: 首页 > 知识库问答 >
问题:

字符串问题(do/time循环和if逻辑)

终祯
2023-03-14

这段代码在两个方面出了问题,我无法诊断,但与if语句无关:if (strlen(strA)

我注意到的第二个问题是,如果我输入一个字符串“1111111111111”,它显然太长,程序会说密码太长,但整个do/while循环终止,它会要求我确认密码。它应该要求我再次输入密码。

如果我去掉 if 语句:if (strlen(strA)

任何人都可以诊断问题吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void) {
    char strA[10];
    char strB[10];
    char strC[] = {'1','2','3','4','5','6','7','8','9','0'};
    char strD[] = {'!','@','#','$','%','^','&','*','(',')'};

    char strE[] = {'a','b','c','d','e','f','g','h','i','j','k',
                   'l','m','n','o','p','q','r','s','t','u','v',
                   'w','x','y','z'};

    char strF[] = {'A','B','C','D','E','F','G','H','I','J',
                   'K','L','M','N','O','P','Q','R','S',
                   'T','U','V','W','X','Y','Z'};
    int i, j, k;
    do {
        k = 0;
        j = 0;

        printf("Please enter your password: ");
        scanf("%s", &strA);
        printf("%s\n", strA);

       if(strlen(strA) > 8) {
           printf("That password is too long\n");
       }
       else if(strlen(strA) < 9) {
           while (j <= 9) {
               for(i = 0; i <= 9; i++) {
                   if(strA[j] == strC[i]) {
                       printf("there is a number in this string.\n");
                       k++;
                       j = 0;
                       while (j <= 9) {
                           for(i = 0; i <= 9; i++) {
                               if(strA[j] == strD[i]) {
                                   printf("there is a character in this string.\n");
                                   k++;
                                   j = 0;
                                   while(j <= 9) {
                                       for(i = 0; i <= 25; i++) {
                                           if(strA[j] == strE[i]) {
                                               printf("there is a lowercase letter in this string.\n");
                                               k++;
                                               j = 0;
                                               while(j <= 9) {
                                                   for(i=0;i<=25;i++) {
                                                       if(strA[j] == strF[i]) {
                                                           printf("there is an uppercase letter in this string.\n");
                                                           k++;
                                                       }
                                                   }
                                                   j++;
                                              }
                                          }
                                      }
                                      j++;
                                  }
                              }
                          }
                          j++;
                      }
                  }
              }
              j++;
          }
          if(k < 4) {
              printf("Your password must contain at least one uppercase letter, one lowercase letter, a number, and a special character.\n");
          }
      }
    } while(k < 4);

    printf("Please confirm your password: ");
    scanf("%s",&strB);

    while(strcmp(strA, strB) != 0) {
        printf("%s\n",strB);
        printf("Your passwords do not match.\nPlease confirm your password: ");
        scanf("%s",&strB);
    }

    putchar('\n');
    printf("%s\n", strA);
    printf("%s\n", strB);

    return 0;
}

共有2个答案

公孙威
2023-03-14

查看ASCII标准:有一种更快的方法可以测试char c是否是数字(c

更多信息:查看此处所述的< code>ctype.h,确定char是数字还是字母

http://www.cplusplus.com/reference/locale/isalpha/

isalpha(c):如果字母

isdigit(c):如果数字为真

''isupper(c)' : 如果大写,则为 true

< code>islower(c):如果小写,则为true

再见,

弗朗西斯

严玉泽
2023-03-14

我认为下面这句话是在制造问题:

char strA[10];

char strB[10];

使用默认值初始化

memset(&strA,'\0', sizeof(strA));
memset(&strB,'\0', sizeof(strB));
 类似资料:
  • 这段代码是为一个基本的杂货计算器的按钮。当我按下按钮时,一个输入对话框显示您在哪里输入您的商品价格。我遇到的问题是,我不知道如何获得循环,使输入对话框在输入后弹出。 我希望它总是回来,除非用户选择ok与nothing或cancel,在这种情况下,循环应该中断并填充剩余的框。使用当前的代码,我必须每次手动按下按钮来恢复对话框。我一直在玩不同的while条件和if语句,但我似乎无法让它发挥作用。我是一

  • 在Bash中模拟do-time循环的最佳方法是什么? 我可以在进入循环之前检查条件,然后继续在循环中重新检查条件,但这是重复的代码。有没有更干净的方法? 我的脚本的伪代码: 如果在时间之后启动,则不会执行,而do-time会执行。

  • 我已经有几年没有编写代码了,一直在编写简单的Java程序来重新熟悉基本原理。然而,我很难让我的do-while循环按照我想要的方式运行。我想我并不完全理解do-while循环是如何工作的,但我想要的是从System.in中收集作为int的用户输入,并在他们输入其他数据表单时继续请求有效的int输入。我所拥有的是: 这不起作用有两个原因。首先,如果我输入一个非int值,它会立即崩溃,引发输入不匹配异

  • do loop用于执行一定次数的语句。 需要执行语句的次数由传递给do循环的值确定。 语法 (Syntax) do循环语句的语法如下 - do count statement #1 statement #2 ... End Statement#1 and Statement#2是一系列在do循环中执行的语句。 count变量表示do循环需要执行的次数。 流程图 (Fl

  • 当布尔条件为True或者条件变为True时,它会重复封闭的语句块。 它可以随时使用Exit Do语句终止。 此循环结构的语法是 - Do { While | Until } condition [ statements ] [ Continue Do ] [ statements ] [ Exit Do ] [ statements ] Loop -or- Do

  • do循环结构允许迭代地执行语句或一系列语句,而给定条件为真。 语法 (Syntax) do循环的一般形式是 - do var = start, stop [,step] ! statement(s) … end do Where, 循环变量var应该是一个整数 start是初始值 stop是最终值 step是增量,如果省略,则变量var增加1 例如 (For example)