【发布时间】:2021-10-30 08:56:00
【问题描述】:
所以我对编码非常陌生,并且正在学习本教程系列,这里的第一个任务是为包括大写/小写字母、数字和符号的密码创建一个检查器,但我还是被困在了最开始的地方。 ..所以这里有一些代码和我的问题:
int main()
{
int pw[21];
int pwVUpper = 0;
int pwnum = 0;
printf("Please choose a password.\n");
printf("Make sure it includes at least one number, lower and upper case letter and one of the symbols: !, _, $, -, /.\n");
scanf(" %c", pw);
while((pwnum<=21)){
if(isupper(pw[pwnum])){
printf("lol!");
pwnum++;
}
}
return 0;
}
所以这只是检查大写字母的开始,我想让循环遍历“pw”数组的每个字母,然后才打印“lol!”,如果它检查大写字母,但是,它只检查数组中的第一个字母,并且只打印一次“lol!”,即使该数组在任何时候都恰好有 2 个大写字母。
我尝试将数组字母编号与变量 pwnum 关联,并且随着循环的进行,变量增加,因此将检查下一个字母。
提个醒:从各种搜索中,我发现对于我正在尝试做的事情有更好的解决方案,但是很多关键字我还没有完成,我想完成这个正如教程系列所建议的那样,只有有限的知识,我似乎误解了循环或其他东西,此时我真的开始感到大脑受损,可能是吧!
【问题讨论】:
-
pw
数组有 21 个元素,索引为 0 - 20。尝试访问索引 21 超出范围并调用未定义行为。 -
注意缩进样式(你在哪里放置你的大括号)可以帮助你理解代码的结构。这应该可以帮助您找到问题。
-
格式化对于提高可读性很重要。在这里为您编辑。
-
pwnum++;
应该在该代码块之外 - 因为当isupper()
为假时,循环将停止。 -
int pw[21];
应该是char pw[21];
和scanf(" %c", pw);
应该是scanf("%20s", pw);
你也可以检查 uninitialised 数组元素。
标签: arrays c loops while-loop new-operator