c语言多行输入字符串

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

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

密码含有至少一个数字

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

#include
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;
}

该回答通过自己思路及引用到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,否则会影响下一行输入的判断结果。


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

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7608155
  • 这篇博客你也可以参考下:解决在页面中播放视频时只有声音却不显示图像的问题
  • 除此之外, 这篇博客: 码了这么久的代码,我居然不知道C程序有这些结构?中的 1.预处理命令 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    你是不是经常在编写程序中看到以下等字样?

    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #define
    #error 
    #if
    #else
    #elif
    #endif
    #ifdef
    #ifndef
    #undef
    #line
    #pragma
    

    我想,大部分小白只知道前面5种预处理命令。
    可能很多小白太过纠结于算法,而忽略了这些C语言的核心知识。
    学知识,要善于总结。而不是学一点丢一点,成了杂学,没有系统的知识树。
    在这里插入图片描述
    下面就讲一讲预处理命令
    ①文件包含命令

    //语法:#include<文件名>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    

    include是关键字,可以包含一个文件名,每个C语言程序都包含头文件,不同头文件提供不同的函数,若没有stdio.h这个头文件,C语言程序就无法输入(scanf)输出(printf);stdlib、string.h两个头文件也包含了其他的函数,要调用相应的函数,就要调用相应的头文件。
    ②宏定义命令

    //语法:#define 标识符 字符串
    #define PI 3.1415926
    #define Hello "Hello World"
    //又可以定义函数表达式
    #define f(x) x*x  //表示f(x)=x^2
    #define f(x,y) x*y //表示f(x,y)=x*y
    

    宏定义的变量的作用域和生存期是整个程序,对整个程序都起作用。
    ③条件编译命令
    关键字如下

    #ifdef
    #if
    #else
    #endif
    #ifndef
    

    许多C语言入门教材上缺乏对条件编译命令的详解,这里先混个脸熟,后续会有条件编译命令的专题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^