黑马程序员技术交流社区
标题: 基础测试问题 [打印本页]
作者: 50mmf1.0 时间: 2015-5-5 21:05
标题: 基础测试问题
本帖最后由 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;
}
作者: oucding 时间: 2015-5-5 21:29
你第二个for循环有问题,思路是不对的打个比方要是遇到字符z你想把它变成什么?
作者: 50mmf1.0 时间: 2015-5-5 21:35
里面有个条件如果a++的值大于Z了就做一次a - 26的操作。所以要是z,那么输出的就是abc。这些运行都没问题,只是结果输出来都是大写让我很无解。。
作者: 50mmf1.0 时间: 2015-5-5 23:08
已经解决了。。是Xcode的原因。放在终端里运行一点问题都没有。。
纠结了一天的bug我也是醉了。。。。:sleepy:
不过百度了很多新的知识,有收获总是不错的。
作者: oucding 时间: 2015-5-6 06:02
你试试xyz这一串字符了么?应该有点问题的
作者: oucding 时间: 2015-5-6 06:06
for (int i = 0; i < 3 ; i++)
{
while (a == 'z' || a == 'Z' )
{
a = a - 26;
}
a++;
printf("%c",a);
}
你试试把第二段for循环改成这样,看看怎么样
作者: ruihai 时间: 2015-5-6 09:38
while (a > 'z' || a > 'Z' )
{
a = a - 26;
}
循环条件错了
作者: 50mmf1.0 时间: 2015-5-6 12:31
如果把a++放后面,那如果输入的是x或y时并不会执行while语句,然后直接a++,所以x打印出来应该是yz{,y打印出来应该是z{\。只有输入z的时候才会打印abc。
如果把a++放前面,就是转换之后的结果只要大于z的ascii码值了,就再-26回到a。
作者: chensc 时间: 2015-5-6 18:54
学习学习!
作者: 枫宇翔 时间: 2015-5-6 19:39
解决了就好,天天学习
作者: asd26187 时间: 2015-5-6 21:36
学习学习!
作者: zy18692243338 时间: 2015-5-6 22:03
我是隔壁班的,原晾我来这边转b!!!
作者: oucding 时间: 2015-5-6 23:52
我试了,没问题的,遇到x的话,的确头两次不会进入while循环,这时候打印出来yz,for循环的第三次a的值就是{(因为第二次循环完了a的值加了1),那么就会进入到while循环 将a的值减去26,正好是a
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |