标题:求教:字母大小写转换
只看楼主
huang1982
Rank: 2
等 级:论坛游民
帖 子:25
专家分:29
注 册:2012-2-13
结帖率:100%
已结贴  问题点数:20 回复次数:8 
求教:字母大小写转换
# include <stdio.h>
int main(void)
{
    char ch;   
    scanf("%c", &ch);  
 
    if (ch>='A' && ch<='Z')  
        ch = (ch+32);
    if (ch>='a' && ch<='z')  //为什么这句换成 else if (ch>='a' && ch<='z') 输出结果就正确呢?
        ch = (ch-32);
  
    printf("%c\n", ch);  
    return 0;
}
输入 A 时,输出还是A,输入 a 时, 输出 A 就是对的。换成注释那行,输出的结果就是正确的~~为什么呢?

[ 本帖最后由 huang1982 于 2012-2-15 01:36 编辑 ]
搜索更多相关主题的帖子: void 字母 include 
2012-02-15 01:21
huang1982
Rank: 2
等 级:论坛游民
帖 子:25
专家分:29
注 册:2012-2-13
得分:0 
嗯,想了一下,这样是对的吧?
# include <stdio.h>
int main(void)
{
    char ch;   
    scanf("%c", &ch);   
    if (ch>='A' && ch<='Z')  
        ch = (ch+32);
    else
        ch = (ch-32);   
    printf("%c\n", ch);   
    return 0;
}
2012-02-15 01:34
tt7721
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:60
专家分:107
注 册:2011-8-7
得分:5 
按照你的原程序、
输入A,其ASCII代码为65
执行ch=ch+32
结果ch=97也就是字符a
再执行下面这句判断if (ch>='a' && ch<='z')
很明显这时候的ch为字符a 符合判断条件
继续执行 ch=ch-32
所以结果又变成了 65  也就是说A
如果if (ch>='a' && ch<='z')这句换成 else if (ch>='a' && ch<='z')
意思如果不符合ch>='a' && ch<='z' 才执行ch>='a' && ch<='z'
就这个意思吧。。
2012-02-15 06:02
天天涯涯
Rank: 4
等 级:业余侠客
帖 子:215
专家分:267
注 册:2011-10-17
得分:5 
如果输入是大写字母,第一个if执行后,大写就变小写了,那么就会执行第二个if,小写又变成大写了。所以大写原样输出。
2012-02-15 06:02
C_596322153
Rank: 6Rank: 6
来 自:徽州
等 级:侠之大者
帖 子:182
专家分:466
注 册:2012-1-10
得分:5 
顶三楼,,,,,,,,
2012-02-15 08:00
ljl123970
Rank: 2
等 级:论坛游民
帖 子:31
专家分:42
注 册:2012-1-30
得分:5 
3楼正解
代码是顺序执行的,执行完第一个if就接着执行第二个if语句。
改成else if 就判断执行,只执行一个if语句

[ 本帖最后由 ljl123970 于 2012-2-15 08:24 编辑 ]
2012-02-15 08:19
huang1982
Rank: 2
等 级:论坛游民
帖 子:25
专家分:29
注 册:2012-2-13
得分:0 
回复 3楼 tt7721
嗯,谢谢了,初学,半夜有点迷糊了。
2012-02-15 10:25
zxd675816777
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:252
专家分:631
注 册:2012-2-3
得分:0 
调用库ctype.h里面的函数就一下解决了。。。

数学好难!
2012-02-15 13:34
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
得分:0 
我也刚遇到这样的疑惑,看到3楼4楼解释茅塞顿开,非常感谢!
看来我还是没有彻底读懂程序的运行顺序,不细心;虽然我自己通过尝试更改第二个if用else if排除了这个问题,
但是想半天还是没太明白为什么用两个if不行,就没想到,第一个if转换后第二个if的条件就满足了,所以就转回去了。实际上第一个if执行了,我一直困惑在为啥第一个if不执行。我把第二个if给//掉后结果正常的时候,也还是没有想到被第二个if给转回去的问题。
真是感谢

[ 本帖最后由 wanglianyi1 于 2015-6-29 10:26 编辑 ]
2015-06-29 10:20



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-360906-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.063377 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved