这段代码在两个方面出了问题,我无法诊断,但与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;
}
查看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
再见,
弗朗西斯
我认为下面这句话是在制造问题:
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)