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

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日

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)