gpt4 book ai didi

c - Bucky Robert 的第一个任务,使用 isupper()、isdigit() 验证密码,并包含一个 '$' 字符

转载 作者:太空宇宙 更新时间:2023-11-04 06:58:23 25 4
gpt4 key购买 nike

好吧,我一直在看 Bucky Robert 的 C 编程教程,他给观众的第一个任务是制作一个程序来检查密码是否至少有一个大写字符、一个数字和一个美元符号。

这是我的代码:

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

int main()
{
int upper = 0;
int digit = 0;
int dollar = 0;

char password[16];

int loop = 1;

while(loop == 1){

printf("Enter your password: ");
scanf(" %s", password);

int i;
for(i = 0; i <= 16; i++){
printf(" %c", password[i]);

if(isupper(password[i])){
upper = 1;
printf("\t is upper");
}

if(isdigit(password[i])){
digit = 1;
printf("\t is digit");
}

if(password[i] == '$'){
dollar = 1;
printf("\t is dollar");
}
printf("\n");
}

if((upper == 1) && (digit == 1) && (dollar == 1)){
printf("Your password is valid\n");
loop = 0;
} else {
printf("Your password is invalid\n");
}
}

return 0;
}

程序在输入“P4sswoRd”后在控制台中打印:

 Enter your password: P4sswoRd
P is upper
4 is digit
s
s
w
o
R is upper
d



@

ö
 
`
$ is dollar
Your password is valid

我输入的所有密码都不包含“$”字符,但程序仍能找到检测它的方法。它在字符后打印“is digit”或“is dollar”的原因是检查代码中出了什么问题并查看为什么密码都是有效的。我不知道为什么会打印所有这些随机字符,我宁愿知道我的程序出了什么问题,也不愿采用新方法来完成手头的任务。

最佳答案

这个循环是错误的:

for(i = 0; i <= 16; i++){

如果您只输入 4 个字符,您应该只检查字符串的前 4 个字符。这就是您看到大量随机字符的原因——这些是 password 剩余元素中的垃圾。 .应该是:

size_t pw_len = strlen(password);
for (i = 0; i < pw_len; i++) {

此外,请记住,由于数组是从零开始的,因此数组的最后一个元素的索引长度为 1。因此,如果您确实想处理声明为 password[16] 的数组的所有元素, 循环标准应该是 i < 16 , 不是 i <= 16 -- 将在最后一次迭代时尝试访问数组外部。

您还需要初始化 upper , digit , 和 dollar while开头的变量环形。否则,如果您键入包含数字和 $ 的密码, 然后是一个大写的新密码,第二个密码将被称为有效,因为它仍然有 digitdollar以前密码的设置。

所以应该是:

while(loop == 1){
upper = digit = dollar = 0;

关于c - Bucky Robert 的第一个任务,使用 isupper()、isdigit() 验证密码,并包含一个 '$' 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41513464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com