bayd1602 2023-03-28 12:44 采纳率: 100%
浏览 64
已结题

c语言多行输入字符串

密码含有至少一个小写字母

密码含有至少一个大写字母

密码含有至少一个数字

密码含有至少一个特殊符号,特殊符号包括 ()`!@#$%^&*_-+=|{}[]:;'<>,.?
要求输入多行密码,满足其中三个条件就输出true;否则输出false
不知道哪里出错了,比如我输入asw没有输出?

#include<stdio.h>
int main(){char c;int a,b,e,d;
    while(c=getchar()!=EOF){
        
        if(getchar()>='a'&&getchar()<='z')a=1;
            if(getchar()>='A'&&getchar()<='Z')e=1;
            if(getchar()>='0'&&getchar()<='9')b=1;
            if(getchar()>='#'&&getchar()<='.'||getchar()>=':'&&getchar()<='@'||getchar()>='['&&getchar()<='`'||getchar()=='!')d=1;
            if(a+b+e+d>2)printf("true\n");
            else printf("false\n");
            a=0;b=0;e=0;d=0;
            
    }
    return 0;
}

  • 写回答

2条回答 默认 最新

  • Leodong. 2023-03-28 12:55
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:

      问题出在你的代码中使用了多次getchar(),每次调用getchar()都会读取一个字符,并且每次调用后指针都会往后移动一个字符位置,所以实际上你的代码只会处理每个输入字符串的第一个字符,而后面的字符都被跳过了。正确的做法是将每次读取的字符存储到一个变量中,然后对这个变量进行判断。
    

    下面是修改后的代码示例:

    #include <stdio.h>
    
    int main() {
        char c;
        int a, b, e, d;
        while ((c = getchar()) != EOF) {
            a = b = e = d = 0;
            while (c != '\n') {
                if (c >= 'a' && c <= 'z') {
                    a = 1;
                } else if (c >= 'A' && c <= 'Z') {
                    e = 1;
                } else if (c >= '0' && c <= '9') {
                    b = 1;
                } else if (c == '(' || c == ')' || c == '`' || c == '!' ||
                           (c >= '@' && c <= '[') ||
                           (c >= ']' && c <= '_') || c == '-' || c == '+' ||
                           c == '=' || c == '|' || (c >= '{' && c <= '}') ||
                           c == ';' || c == ':' || c == '<' || c == '>' ||
                           c == ',' || c == '.') {
                    d = 1;
                }
                c = getchar();
            }
            if (a + b + e + d >= 3) {
                printf("true\n");
            } else {
                printf("false\n");
            }
        }
        return 0;
    }
    

    注意,上面的代码中使用了一个嵌套的while循环来读取每行输入的所有字符,并且判断完每行输入后要将a、b、e、d四个变量重置为0,否则会影响下一行输入的判断结果。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月5日
  • 已采纳回答 3月28日
  • 创建了问题 3月28日

悬赏问题

  • ¥15 乌班图ip地址配置及远程SSH
  • ¥15 怎么让点阵屏显示静态爱心,用keiluVision5写出让点阵屏显示静态爱心的代码,越快越好
  • ¥15 PSPICE制作一个加法器
  • ¥15 javaweb项目无法正常跳转
  • ¥15 VMBox虚拟机无法访问
  • ¥15 skd显示找不到头文件
  • ¥15 机器视觉中图片中长度与真实长度的关系
  • ¥15 fastreport table 怎么只让每页的最下面和最顶部有横线
  • ¥15 java 的protected权限 ,问题在注释里
  • ¥15 这个是哪里有问题啊?