A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 50mmf1.0 中级黑马   /  2015-5-5 21:05  /  1730 人查看  /  12 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 50mmf1.0 于 2015-5-5 23:09 编辑

基础测试题。
测试和代码也没什么问题,但是每次输入小写打印出来的字母都是大写的怎么破???
经调试是使用while之后输入的值就变成大写的字符了。可是getchar()是直接提取字符的ascii码,这里也不会出问题。。
研究一晚上了已崩溃。。。
求大神指条明路。
新买的Mac不想砸。。

/*
7.编程实现对键盘输入的英文名句子进行加密。用加密方法为:当内容为英文字母时,用26字母中的其后三个字母代替该字母,若为其他字符时不变。比如245a95n加密后是245bcd95opq.(C语言)
*/

#include <stdio.h>

int main()
{
    char a;

    printf("请输入一个英文名句子:");

    while ((a = getchar()) != '\n')
    {
        if ((a >= 'A' && a <= 'W') || (a >= 'a' && a <= 'w'))
        {
            for (int i = 0; i < 3 ; i++)
            {
                a++;
                printf("%c",a);
            }
        }
        else if ((a >= 'X' && a <= 'Z') || (a >= 'x' && a <= 'z'))
        {
            for (int i = 0; i < 3 ; i++)
            {
                a++;
                while (a > 'z' || a > 'Z' )
                {
                    a = a - 26;
                }
                printf("%c",a);
            }
        }
        else
        {
            printf("%c", a);
        }
    }

    printf("\n");

    return 0;
}


12 个回复

倒序浏览
你第二个for循环有问题,思路是不对的打个比方要是遇到字符z你想把它变成什么?
回复 使用道具 举报
oucding 发表于 2015-5-5 21:29
你第二个for循环有问题,思路是不对的打个比方要是遇到字符z你想把它变成什么? ...

里面有个条件如果a++的值大于Z了就做一次a - 26的操作。所以要是z,那么输出的就是abc。这些运行都没问题,只是结果输出来都是大写让我很无解。。
回复 使用道具 举报
已经解决了。。是Xcode的原因。放在终端里运行一点问题都没有。。
纠结了一天的bug我也是醉了。。。。:sleepy:
不过百度了很多新的知识,有收获总是不错的。
回复 使用道具 举报
50mmf1.0 发表于 2015-5-5 21:35
里面有个条件如果a++的值大于Z了就做一次a - 26的操作。所以要是z,那么输出的就是abc。这些运行都没问题 ...

你试试xyz这一串字符了么?应该有点问题的
回复 使用道具 举报
50mmf1.0 发表于 2015-5-5 21:35
里面有个条件如果a++的值大于Z了就做一次a - 26的操作。所以要是z,那么输出的就是abc。这些运行都没问题 ...

for (int i = 0; i < 3 ; i++)
            {
                while (a == 'z' || a == 'Z' )
                {
                    a = a - 26;
                }
                a++;
                printf("%c",a);
            }
你试试把第二段for循环改成这样,看看怎么样
回复 使用道具 举报
                while (a > 'z' || a > 'Z' )
                {
                    a = a - 26;
                }

循环条件错了
回复 使用道具 举报
oucding 发表于 2015-5-6 06:06
for (int i = 0; i < 3 ; i++)
            {
                while (a == 'z' || a == 'Z' )

如果把a++放后面,那如果输入的是x或y时并不会执行while语句,然后直接a++,所以x打印出来应该是yz{,y打印出来应该是z{\。只有输入z的时候才会打印abc。
如果把a++放前面,就是转换之后的结果只要大于z的ascii码值了,就再-26回到a。
回复 使用道具 举报
学习学习!
回复 使用道具 举报
解决了就好,天天学习
回复 使用道具 举报
学习学习!
回复 使用道具 举报
我是隔壁班的,原晾我来这边转b!!!
回复 使用道具 举报
50mmf1.0 发表于 2015-5-6 12:31
如果把a++放后面,那如果输入的是x或y时并不会执行while语句,然后直接a++,所以x打印出来应该是yz{,y ...

我试了,没问题的,遇到x的话,的确头两次不会进入while循环,这时候打印出来yz,for循环的第三次a的值就是{(因为第二次循环完了a的值加了1),那么就会进入到while循环 将a的值减去26,正好是a
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马