当前位置:编程学习 > C/C++ >>

C语言 字符 运算

#include<stdio.h>

void main ()

{char zm='A',a;

a=zm+63;

while(a>'A')

a=a-26;

printf(%c",a);

}为什么a=zm+63是对的,输出了大写字母,而当大于63时,如a=zm+70则输出的是? 不知这是什么原因,请高手解释

追问:那我不是用while(a>'A')   a=a-26;将其转化成大写字母了吗,为什么转化不过去?

答案:我觉得你那句while根本就不可能对~你应该用if语句来判断,如果按照你用while语句写的话,那就会一直循环,直到a的值小于'A',你应该用if语句,然后如果是小写的话,让它减去32,如果是大写,就不用动了:

比如你这么写:

char a;

scanf("%c",&c);/*由用户输入a*/

if(a>'a'&&a<'z')

a=a-32;

printf("%c",a);

上面这个是主要的代码,楼主再完善完善,不懂再来问

楼主你能先说一下你这个程序要实现的目的是什么么?还有你char a 没有赋初值啊~你再说明白点~

在C语言中,字符的编码对应的是ansi码下面是ANSI表,

0?/FONT>32[space]64@96`
1·33!65A97a
2·34"66B98b
3·35#67C99c
4·36$68D100d
5·37%69E101e
6·38&70F102f
7·39'71G103g
8* *40(72H104h
9* *41)73I105i
10* *42*74J106j
11·43+75K107k
12·44,76L108l
13* *45-77M109m
14·46.78N110n
15·47/79O111o
16·48080P112p
17·49181Q113q
18·50282R114r
19·51383S115s
20·52484T116t
21·53585U117u
22·54686V118v
23·55787W119w
24·56888X120x
25·57989Y121y
26·58:90Z122z
27·59;91[123{
28·60<92\124|
29·61=93]125}
30·62>94^126~
31·63?95_127·

如果把字符转换成十进制,其编号就是其对应的十进制数,对字符相加,其实等于其编号与数相加得到编号再加一点,字符最大值是127,溢出后,重0开始记,如1值128溢出,直接变为0,

这个是ASCII表 你对照 一下 C语言的数字对应的字符规律

ASCII码对照表

下表列出了字符集中的 0 - 127。

代码字符代码字符代码字符代码字符
032[空格]64@96`
133

上一个:c语言怎么学
下一个:c语言 时间函数

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,