c - 输入用户的密码并检查它是否包含字符、字母和数字

标签 c arrays loops char

我的疑问是,如果我输入一个填满数组的密码,程序就可以正常工作。但是,如果我输入诸如“apple25”之类的密码,我认为它将数组中的空格计为字符,甚至将“apple25”声明为有效密码。

如何防止这种情况发生?它是否也将字符串终止符计为 char?因为即使是“AAPPLLEE2”也是有效密码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define TRUE 1
#define FALSE 0


int main()
{
    char arr[10];
    printf("Enter a password. \n");
    scanf("%s",arr );
   // printf(arr);
    char ch;
    int i;
    int alp=0, dig=0, c=0;


    for (i=0; i<10; i++)
    {
       ch=arr[i];

       if(isalpha(ch))
       {
           alp++;
          // printf(" alpha is %d \n",alp);
       }
       else if(isdigit(ch))
       {
           dig++;
          // printf("digit is %d \n",dig);
       }
       else
       {
           c++;
         //  printf("charectores are %d \n",c);
       }

    }
    if(alp>=1&&dig>=1&&c>=1)
        {
            printf("Valid Password");
        }
    else{
            printf("Invalid Password");
        }
        return 0;
}

最佳答案

  • 要点 1. 始终初始化您的自动局部变量。避免意外访问未初始化的值。

    char arr[10] = {0};
    
  • 第 2 点。始终限制您的输入长度。让您免于遇到 undefined behavior通过比预期更长的输入使分配的内存溢出。

    scanf("%9s",arr );
    
  • 第 3 点。使用 strlen()仅循环输入的有效部分。

关于c - 输入用户的密码并检查它是否包含字符、字母和数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34308879/

相关文章:

c++ - 从已编译的应用程序创建 Windows 服务

javascript - 组件正在将文本类型的受控输入更改为不受控 - ReactJS

python - 在 numpy 数组的末尾追加数组的 n 个副本

javascript - 使用字符串键映射嵌套 JavaScript 对象,然后过滤列表

Char 数据类型在两个字节的情况下保持\n

c - findnext() 函数调用在第二次调用时失败。程序崩溃

c - 指针运算

arrays - 什么是 "value"数组?

c# - foreach 循环中的内存使用情况 C#

c# - ASP.net c# LINQ for 循环