夜蚀天 发表于 2021-11-19 14:56:47

求助

#include<stdio.h>
int main()
{
        char a = { 0 }, i = 0, n,b=0;
        while (i < 10)
        {
                scanf("%c", &n);
                a = n;
                i++;
                printf("%c", n);//原文
                while ((a >= 'a') &&(a<= 'z') || (a >= 'A') &&(a<= 'Z'))
                {
                        if ((a = 'a' + b) || (a = 'A' + b))
                                a= a + 25 - b;
                        b++;
                        if (b>26)
                                printf("%c", a);//密码
                        i++;
                                if(i>10)
                                        break;
                }
        }
        return 0;
}
将原文以此规律翻译
第i个字母变成第(26-i+1)个,例如a变成z
为什么我不能输出密码

番杰 发表于 2021-11-19 16:55:34

你这个程序里面的: printf("%c", n);//原文
这条语句前的i++;有问题,

你在开始的时候把a = n;
然后执行i++;
导致参与第二个while的判断条件是a;
而且,你给数组a的初值都是0;
所以参与 while ((a >= 'a') &&(a<= 'z') || (a >= 'A') &&(a<= 'Z'))的a值是0;
不满足这个判断条件,所以根本就进不去这个while;
所以也就不会输出密码。

改的话,可以把这个i++改到while后,或是直接去掉,
我没太理解你这个i++是为了做什么,
所以只能给出这两个建议。
你可以试试。

夜蚀天 发表于 2021-11-19 17:39:19

番杰 发表于 2021-11-19 16:55
你这个程序里面的: printf("%c", n);//原文
这条语句前的i++;有问题,



我改成这样了,但是密码只能输出zzzzzz{:10_284:}
#include<stdio.h>
int main()
{
        char a = { "abcdefg"}, i = 0, b = 0;
                printf("%s\n", a);//原文
                while ((a >= 'a') &&(a<= 'z') || (a >= 'A') &&(a<= 'Z'))
                {
                        if ((a = 'a' + b) || (a = 'A' + b))
                                a = a + 25 - b;
                        b++;
                        if (b>25)
                                printf("%c", a);//密码
                        if (printf("%c", a))
                                i++;
                        if (i > 10)
                                break;
                }
        return 0;
}

番杰 发表于 2021-11-19 17:59:43

本帖最后由 番杰 于 2021-11-19 18:05 编辑

夜蚀天 发表于 2021-11-19 17:39
我改成这样了,但是密码只能输出zzzzzz
#include
int main()


你之前提问时候的程序
把    printf("%c", n);//原文   这条语句前的i++;去掉试试

另外,我没太看懂   if ((a = 'a' + b) || (a = 'A' + b))    这个if是要做什么;

请把程序所要实现的目的叙述一下。

夜蚀天 发表于 2021-11-19 20:20:45

番杰 发表于 2021-11-19 17:59
你之前提问时候的程序
把    printf("%c", n);//原文   这条语句前的i++;去掉试试



就是输入几个字母
将第i个字母变成第(26-i+1)个字母,例如a变成z,b变成y
然后将原文翻译成密码

番杰 发表于 2021-11-19 21:23:33

本帖最后由 番杰 于 2021-11-19 21:27 编辑

#include<stdio.h>
#include<string.h>

int main()
{
    char a , i = 0;

    scanf("%s", &a);
               
    printf("原文:%s\n", a);//原文

    while (i<strlen(a))
    {                     
       if( (a >= 'a') &&(a<= 'z'))
       {
                           a = (25 - (a - 'a') ) + 'a';
                           i++;
           }
           else if ((a >= 'A') &&(a<= 'Z'))
           {
                        a = (25 - (a - 'A') ) + 'A';
                        i++;
           }
           else
                           i++;
       
    }
        printf("密码:%s", a);//密码
                       
    return 0;
}

夜蚀天 发表于 2021-11-19 21:59:41

番杰 发表于 2021-11-19 21:23


多谢大佬

tomok 发表于 2021-11-19 22:08:38

来看看代码

页: [1]
查看完整版本: 求助