鱼C论坛

 找回密码
 立即注册
查看: 2101|回复: 21

[已解决]字符大小写转换

[复制链接]
发表于 2020-3-3 12:09:27 | 显示全部楼层 |阅读模式

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

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

x
我是用的是code::blocks
先附上代码
#include <stdio.h>
#define NUM 32

int main()
{
    int i, ch;
    printf("请输入一行英文句子:\n");
    while((ch = getchar())!= EOF)
    {
        if (ch >= 'A' && ch <= 'Z')
        {
            ch = ch + NUM;
        }
        else if('a' <= ch <= 'z')
        {
            ch = ch - NUM;
        }
        putchar(ch);
    }

    return 0;
}
在第08行 while((ch = getchar())!= EOF)会检测输入的是否是文件结束符,我的系统是win10,循环终止的条件是用户按下了 ctrl + z

我输入第一行内容:success 输出结果正常
但是继续输入其他内容会出现乱码
可能是出现特殊字符的原因
求解

另外有没有办法使这个程序能够正常输出

我的编译器和运行结果附图
最佳答案
2020-3-3 12:11:57
你有认真检查你的代码吗?
else if('a' <= ch <= 'z')
运行结果.png
编译器.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-3 12:11:57 | 显示全部楼层    本楼为最佳答案   

回帖奖励 +1 鱼币

你有认真检查你的代码吗?
else if('a' <= ch <= 'z')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-3 12:20:22 | 显示全部楼层
人造人 发表于 2020-3-3 12:11
你有认真检查你的代码吗?

不可以这样写吗? ch 是int  然后它处于对应字符ASCLL码的范围之间
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-3 12:22:19 | 显示全部楼层
人造人 发表于 2020-3-3 12:11
你有认真检查你的代码吗?

我按照你的改过来了 运行是对的 不过为什么呢 求解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 12:22:19 | 显示全部楼层
冷回清风暖 发表于 2020-3-3 12:20
不可以这样写吗? ch 是int  然后它处于对应字符ASCLL码的范围之间

这是C语言,你从python过来的?

那你为什么这么写?
if (ch >= 'A' && ch <= 'Z')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-3 12:24:42 | 显示全部楼层
人造人 发表于 2020-3-3 12:22
这是C语言,你从python过来的?

那你为什么这么写?

我是为了测试看看他们两个能够达到一样的效果
输入一行数据的时候可以
输入第二行的时候就不行了
不过为什么
ch >='a'&& ch <= 'z' 和 'a' <= ch <= 'z'不相同呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 12:26:27 | 显示全部楼层
冷回清风暖 发表于 2020-3-3 12:24
我是为了测试看看他们两个能够达到一样的效果
输入一行数据的时候可以
输入第二行的时候就不行了

C语言不支持这样的写法,就是这么简单,不支持就是不支持,没有商量的余地
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 12:27:45 | 显示全部楼层

回帖奖励 +1 鱼币

冷回清风暖 发表于 2020-3-3 12:24
我是为了测试看看他们两个能够达到一样的效果
输入一行数据的时候可以
输入第二行的时候就不行了

C语言的语法不允许这样写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-3 12:28:12 | 显示全部楼层
人造人 发表于 2020-3-3 12:26
C语言不支持这样的写法,就是这么简单,不支持就是不支持,没有商量的余地

唉 好的把 谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-3 12:30:24 | 显示全部楼层

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 12:31:10 | 显示全部楼层

回帖奖励 +1 鱼币

冷回清风暖 发表于 2020-3-3 12:24
我是为了测试看看他们两个能够达到一样的效果
输入一行数据的时候可以
输入第二行的时候就不行了

这是规定,不能那样写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-3 12:36:06 | 显示全部楼层
一个账号 发表于 2020-3-3 12:31
这是规定,不能那样写

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-3 12:38:11 | 显示全部楼层
qiuyouzhi 发表于 2020-3-3 12:27
C语言的语法不允许这样写

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 13:10:50 | 显示全部楼层

回帖奖励 +1 鱼币

c语言不允许你那样写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-3 13:20:19 | 显示全部楼层
乘号 发表于 2020-3-3 13:10
c语言不允许你那样写

谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 14:04:47 | 显示全部楼层

回帖奖励 +1 鱼币

这可太真实了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 21:24:41 | 显示全部楼层

回帖奖励 +1 鱼币

规定不能破
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 16:49:05 | 显示全部楼层
人造人 发表于 2020-3-3 12:26
C语言不支持这样的写法,就是这么简单,不支持就是不支持,没有商量的余地

那为什么不报错?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 17:11:01 | 显示全部楼层
TCY 发表于 2020-3-6 16:49
那为什么不报错?

C语言都能有乱码大赛,这么一个小东西
编译器是不会在意的,只不过不会达到需要的效果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-6 18:01:33 | 显示全部楼层
TCY 发表于 2020-3-6 16:49
那为什么不报错?

因为这么写,在C语言中不属于语法错误,这属于逻辑错误
C语言编译器只有在语法错误的时候才报错,逻辑错误有可能是报警告,也有可能编译器根本就发现不了
语法错误编译器是一定会报错的,但是逻辑错误就不一定了,如果编译器能检查出来,那就报警告

比较运算符从左到右结合,也就是
else if('a' <= ch <= 'z')
else if(('a' <= ch) <= 'z')

先计算 'a' <= ch
这个表达式的结果要么为真,要么为假,要么是0,要么是1
然后拿0或1和 'z'比较,是小于等于运算
'z' 永远大于0,也永远大于1

也就是
else if('a' <= ch <= 'z')
else if(1)

一个效果,'a' <= ch <= 'z'
这个表达式的结果永远为1,不管ch是什么,结果永远是1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 23:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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