C语言 字母大小写转换 怎么实现

为什么以下语句实现不了?#include<stdio.h>voidmain(){charx;inty,z;scanf("%c",&x);y='x';if(y<='a'&&... 为什么以下语句实现不了?

#include<stdio.h>
void main()
{
char x;
int y,z;
scanf("%c",&x);
y='x';
if (y<='a'&&y>='Z') z='y'-('a'-'A');
else z='y'+32;

printf("%c\n",z);

}
展开
 我来答
匿名用户
2014-04-07
展开全部

你还有语法(主要对语法使用的理解,编译器是能过的)问题:(代码格式也有点小问题)

y='x'; /* 这句实际上是在初始 y 为 'x' 这个字符的 ascii 值 */
if (y<='a'&&y>='Z') /* 由于前一条赋值,这一条件等同于
if('x'<='a'&&'x'>='Z') 条件总为假,所以下一条永远不会执行 */
  z='y'-('a'-'A'); /* 这条给 z 赋的值,会始终为 'Y' 的 ascii 值 */
else
  z='y'+32; /* 'y'这个字符再加 32('a'和'A'之差)都已经超出 ascii 基础 0~127 的范围了 */

/* 下面是按你的逻辑,把重新写了写的,当然还有逻辑错误,
 * 主要就是区间问题,这个拿个 ascii 表查一下数一下就 oh yeah 了。 */
y=x;
if (y<='a'&&y>='Z')
  z = y-('a'-'A');
else
  z = y+32;
housejar
推荐于2017-09-21
知道答主
回答量:31
采纳率:0%
帮助的人:15.6万
展开全部
这样写会更清楚点,你的错误就在判断语句哪里。有不懂的可以问我
#include<stdio.h>

int main()
{
char x;
int y,z;
scanf("%c",&x);;
if (x>='a'&&x<='z')
z=x-'a'+'A';
else
z=x-'A'+'a';

printf("%c\n",z);

getchar();
getchar();
return 0;
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
武林50我爱你
2014-04-07 · TA获得超过851个赞
知道小有建树答主
回答量:423
采纳率:0%
帮助的人:595万
展开全部
你的本意是想把x赋给y,但是y='x'这句话是把x这个字母的ASCII赋给了y,所以达不到想要的效果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友d3c72a8
2014-04-07 · TA获得超过1100个赞
知道小有建树答主
回答量:522
采纳率:0%
帮助的人:304万
展开全部
。。。。本来是没问题的,只是你的x y z别加上单引号啊。。。把xyz的单引号去了,只留abc的应该没问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
White_MouseYBZ
2014-04-08 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6624万
展开全部

y='x';
if (y<='a'&&y>='Z') z='y'-('a'-'A');
else z='y'+32;
两句改成z=x^0x20;就妥了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式