Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用c语言编写程序,检查数字和大写字母是否无效_C - Fatal编程技术网

用c语言编写程序,检查数字和大写字母是否无效

用c语言编写程序,检查数字和大写字母是否无效,c,C,我试图用c语言编写一个程序,检查输入的内容是否包含大写字母和数字。如果是这样,它输出的输入是好的,如果输入只包含一个大写字母或一个数字或没有,它输出的是坏的。但是当我运行代码并输入一个只有一个数字的输入时,它仍然输出的是好的输入。这是我的代码,有人能指出是什么原因吗 #include<stdio.h> #include<stdlib.h> #include<ctype.h> #include<string.h> #include<math.h

我试图用c语言编写一个程序,检查输入的内容是否包含大写字母和数字。如果是这样,它输出的输入是好的,如果输入只包含一个大写字母或一个数字或没有,它输出的是坏的。但是当我运行代码并输入一个只有一个数字的输入时,它仍然输出的是好的输入。这是我的代码,有人能指出是什么原因吗

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


int main()
{

   int uppercase, digit = 0;
   int i;
   char pass [100];

   printf("Please input a password\n");
   scanf(" %s", pass);

   for(i=0;i<=100;i++)
   {
            if(isupper(pass[i])){uppercase = 1;}
            if(isdigit(pass[i])){digit = 1;}
   }

    if(uppercase==1  && digit==1){printf("Your password is good!");
    }else{printf("Your password sucks");}


    return 0;
    }
#包括
#包括
#包括
#包括
#包括
int main()
{
int大写,数字=0;
int i;
charpass[100];
printf(“请输入密码”);
扫描频率(“%s”,通过);

对于(i=0;i您正在将
char pass[100]
分配为一个自动局部变量。这意味着它将被放置在函数的堆栈框架中。以这种方式分配的变量不会初始化为任何特定值,其内容未定义

如果您键入密码“test”,您将

pass[0] == 't'
pass[1] == 'e'
pass[2] == 's'
pass[3] == 't'
pass[4] == '\0'
pass[5] == ????
pass[5]
可以是任何值,包括大写或数字。您的“for”循环正在读取这些未初始化的值并给出错误的结果

若要解决此问题,请在for循环遇到“\0”或“null”字符时停止它

for(i=0;pass[i]!='\0';i++)
如果密码太长,此代码将暴露安全漏洞。

已更正

#include <stdio.h>
#include <ctype.h>

int main() {
    int uppercase = 0, digit = 0, i;
    char pass[100];
    printf("Please input a password\n");
    scanf("%s", pass);
    for (i = 0; pass[i]; ++i) {
        if (isupper(pass[i])) uppercase = 1;
        if (isdigit(pass[i])) digit = 1;
    }
    if (uppercase && digit) printf("Your password is good!");
    else printf("Your password sucks");
    return 0;
}
#包括
#包括
int main(){
int大写=0,数字=0,i;
charpass[100];
printf(“请输入密码”);
扫描频率(“%s”,通过);
对于(i=0;通过[i];++i){
如果(isupper(pass[i])大写=1;
如果(isdigit(pass[i])位=1;
}
if(大写和数字)printf(“您的密码很好!”);
else printf(“你的密码糟透了”);
返回0;
}

for(i=0;iYes),因为我不知道输入的长度,但如果密码为空(0个字符),则可能少于100,但
pass[50]
包含一个数字和
pass[95]
包含一个大写字符,您可以输出密码是否正确。在声明过程中,用0初始化变量
大写
,如
数字
变量。@Wimmel:101个字符,最后一个是未定义的行为。