字符大小写转换
我是用的是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 输出结果正常
但是继续输入其他内容会出现乱码
可能是出现特殊字符的原因
求解
另外有没有办法使这个程序能够正常输出
我的编译器和运行结果附图
你有认真检查你的代码吗?
else if('a' <= ch <= 'z')
人造人 发表于 2020-3-3 12:11
你有认真检查你的代码吗?
不可以这样写吗?{:10_277:} ch 是int然后它处于对应字符ASCLL码的范围之间 人造人 发表于 2020-3-3 12:11
你有认真检查你的代码吗?
我按照你的改过来了 运行是对的 不过为什么呢{:10_266:} 求解 冷回清风暖 发表于 2020-3-3 12:20
不可以这样写吗? ch 是int然后它处于对应字符ASCLL码的范围之间
这是C语言,你从python过来的?
那你为什么这么写?
if (ch >= 'A' && ch <= 'Z') 人造人 发表于 2020-3-3 12:22
这是C语言,你从python过来的?
那你为什么这么写?
我是为了测试看看他们两个能够达到一样的效果
输入一行数据的时候可以
输入第二行的时候就不行了
不过为什么 ch >='a'&& ch <= 'z' 和 'a' <= ch <= 'z'不相同呢? 冷回清风暖 发表于 2020-3-3 12:24
我是为了测试看看他们两个能够达到一样的效果
输入一行数据的时候可以
输入第二行的时候就不行了
C语言不支持这样的写法,就是这么简单,不支持就是不支持,没有商量的余地
冷回清风暖 发表于 2020-3-3 12:24
我是为了测试看看他们两个能够达到一样的效果
输入一行数据的时候可以
输入第二行的时候就不行了
C语言的语法不允许这样写 人造人 发表于 2020-3-3 12:26
C语言不支持这样的写法,就是这么简单,不支持就是不支持,没有商量的余地
唉 好的把 谢谢 冷回清风暖 发表于 2020-3-3 12:28
唉 好的把 谢谢
谢谢 冷回清风暖 发表于 2020-3-3 12:24
我是为了测试看看他们两个能够达到一样的效果
输入一行数据的时候可以
输入第二行的时候就不行了
这是规定,不能那样写 一个账号 发表于 2020-3-3 12:31
这是规定,不能那样写
谢谢 qiuyouzhi 发表于 2020-3-3 12:27
C语言的语法不允许这样写
谢谢 c语言不允许你那样写{:10_256:} 乘号 发表于 2020-3-3 13:10
c语言不允许你那样写
谢谢 这可太真实了 {:10_256:} 规定不能破 人造人 发表于 2020-3-3 12:26
C语言不支持这样的写法,就是这么简单,不支持就是不支持,没有商量的余地
那为什么不报错? TCY 发表于 2020-3-6 16:49
那为什么不报错?
C语言都能有乱码大赛,这么一个小东西
编译器是不会在意的,只不过不会达到需要的效果 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
页:
[1]
2