鱼C论坛

 找回密码
 立即注册
查看: 3901|回复: 7

[已解决]求助

[复制链接]
发表于 2021-11-19 14:56:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
int main()
{
        char a[10] = { 0 }, i = 0, n,b=0;
        while (i < 10)
        {
                scanf("%c", &n);
                a[i] = n;
                i++;
                printf("%c", n);//原文
                while ((a[i] >= 'a') &&(a[i]<= 'z') || (a[i] >= 'A') &&(a[i]<= 'Z'))
                {
                        if ((a[i] = 'a' + b) || (a[i] = 'A' + b))
                                a[i]= a[i] + 25 - b;
                        b++;
                        if (b>26)
                                printf("%c", a[i]);//密码
                        i++;
                                if(i>10)
                                        break;
                }
        }
        return 0;
}
将原文以此规律翻译
第i个字母变成第(26-i+1)个,例如a变成z
为什么我不能输出密码
最佳答案
2021-11-19 21:23:33
本帖最后由 番杰 于 2021-11-19 21:27 编辑
  1. #include<stdio.h>
  2. #include<string.h>

  3. int main()
  4. {
  5.     char a[1024] , i = 0;

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

  9.     while (i<strlen(a))
  10.     {                     
  11.        if( (a[i] >= 'a') &&(a[i]<= 'z'))
  12.        {
  13.                            a[i] = (25 - (a[i] - 'a') ) + 'a';
  14.                            i++;
  15.            }
  16.            else if ((a[i] >= 'A') &&(a[i]<= 'Z'))
  17.            {
  18.                         a[i] = (25 - (a[i] - 'A') ) + 'A';
  19.                         i++;
  20.            }
  21.            else  
  22.                            i++;  
  23.        
  24.     }
  25.         printf("密码:%s", a);//密码
  26.                        
  27.     return 0;
  28. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-11-19 16:55:34 | 显示全部楼层
你这个程序里面的: printf("%c", n);//原文
这条语句前的i++;有问题,

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

改的话,可以把这个i++改到while后,或是直接去掉,
我没太理解你这个i++是为了做什么,
所以只能给出这两个建议。
你可以试试。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

我改成这样了,但是密码只能输出zzzzzz
#include<stdio.h>
int main()
{
        char a[10] = { "abcdefg"}, i = 0, b = 0;
                printf("%s\n", a);//原文
                while ((a[i] >= 'a') &&(a[i]<= 'z') || (a[i] >= 'A') &&(a[i]<= 'Z'))
                {
                        if ((a[i] = 'a' + b) || (a[i] = 'A' + b))
                                a[i] = a[i] + 25 - b;
                        b++;
                        if (b>25)
                                printf("%c", a[i]);//密码
                        if (printf("%c", a[i]))
                                i++;
                        if (i > 10)
                                break;
                }
        return 0;
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[i] = 'a' + b) || (a[i] = 'A' + b))    这个if是要做什么;

请把程序所要实现的目的叙述一下。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

就是输入几个字母
将第i个字母变成第(26-i+1)个字母,例如a变成z,b变成y
然后将原文翻译成密码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-19 21:23:33 | 显示全部楼层    本楼为最佳答案   
本帖最后由 番杰 于 2021-11-19 21:27 编辑
  1. #include<stdio.h>
  2. #include<string.h>

  3. int main()
  4. {
  5.     char a[1024] , i = 0;

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

  9.     while (i<strlen(a))
  10.     {                     
  11.        if( (a[i] >= 'a') &&(a[i]<= 'z'))
  12.        {
  13.                            a[i] = (25 - (a[i] - 'a') ) + 'a';
  14.                            i++;
  15.            }
  16.            else if ((a[i] >= 'A') &&(a[i]<= 'Z'))
  17.            {
  18.                         a[i] = (25 - (a[i] - 'A') ) + 'A';
  19.                         i++;
  20.            }
  21.            else  
  22.                            i++;  
  23.        
  24.     }
  25.         printf("密码:%s", a);//密码
  26.                        
  27.     return 0;
  28. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-19 21:59:41 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-19 22:08:38 | 显示全部楼层
来看看代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-14 00:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表