好的,我一直在觀看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
我輸入的密碼都不包含「$」字符但該程序仍然找到一種方法來檢測它。在角色檢查代碼中出現錯誤並查看密碼全部有效的原因之後,它打印「數字」或「是美元」的原因。我不知道爲什麼所有這些隨機字符都打印出來,我寧願知道我的程序出了什麼問題,而不願意採用新的方法來完成手頭的任務。
好了,所以我固定的代碼的一部分(謝謝你的方式),但只是部分固定它。只要有大寫字母和數字,它並不總是有效的。如果密碼是1A,那麼它是有效的,1a是無效的。奇怪字符的隨機列表仍然存在,所以也許它與變量i及其在檢測for循環中的'$'字符中的用途有關。 –
看看[this](https://www.tutorialspoint.com/c_standard_library/c_function_scanf.htm)頁面:你應該使用scanf的返回值。 –