c - 关于字符的 C 程序
问题描述
/编写程序检查密码是否包含大写字母、数字和特殊符号。(我已经提供了我所做的,但我没有得到所需的输出。需要解释我在哪里搞砸了。) /
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
int main()
{
int i;
int tuna;
do
{
printf("Enter a password:%c \n", tuna);
scanf(" %c", &tuna);
} while( tuna != (isupper(tuna), isalpha(tuna), isdigit(tuna)) );
return 0;
}
解决方案
这是您问题的完整解决方案。
您需要创建一个定义特殊字符的函数。
此外,您需要将密码读取为字符串,然后将每个字符与您的密码规则进行比较。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>
bool isspecial(char c)
{
return ((c >= 0x21) && (c <= 0x2F)) ||
((c >= 0x3A) && (c <= 0x40)) ||
((c >= 0x5B) && (c <= 0x60)) ||
((c >= 0x7B) && (c <= 0x7E));
}
int main(void)
{
bool contains_upper = false;
bool contains_digit = false;
bool contains_special = false;
int i = 0;
char tuna[65] = { 0x00 }; // password max length is 64 chars
printf("Enter a password: ");
fgets(tuna, 64, stdin);
tuna[strlen(tuna) - 1] = 0x00;
while (i < strlen(tuna))
{
if (isupper(tuna[i]))
{
contains_upper = true;
}
if (isdigit(tuna[i]))
{
contains_digit = true;
}
if (isspecial(tuna[i]))
{
contains_special = true;
}
i++;
}
if (contains_upper && contains_digit && contains_special)
{
printf("Password is ok\n");
}
else
{
printf("Password is not ok\n");
}
return 0;
}
推荐阅读
- phantomjs - 浏览器如何在 http1 上打开 6 个并行连接?
- excel - “对象'_Global'的方法'Rows'失败”启动时登录错误
- java - Swagger:如何记录仅由拦截器/过滤器使用且未出现在方法签名中的 HTTP 标头参数
- three.js - Threejs GLSL中的cameraPosition是什么?
- spotfire - 拆分行并等分对应的值
- node.js - Node js Web App的最佳数据库和简单的数据结构
- angular - Angular 6 cache.addAll() 不适用于 zonejs
- javascript - 反应本机时错误不受支持的顶级事件类型“topTouchStart”
- ocaml - 通过返回一些东西来停止函数
- aem - 如何在 AEM RTE 组件中使用外部样式表