'2'在c语言中表示什么?

#include<stdio.h>
main()
{int c;
while((c=getchar())!='\n')
{switch(c-'2')
{case 0:
case 1:putchar(c+4);
case 2:putchar(c+4);break;
case 3:putchar(c+3);
default:putchar(c+2);break;
}
}
printf("\n");
}
以上是程序,c=getchar()每次只读取一个字符吗?'2‘是为什么不是代表ASCII代码值中的050呢?关键是switch(c-'2')这里不懂,输入“2473Enter键”,结果是668977,'2‘是当做2来运算的,不是与ASCII代码值中的050相对应,怎么回事?

你说的应该是printf函数吧:
通俗的说%m.n中m标示宽度,n标示小数点后显示几位。你的就是显示5个宽度,其中显示2位小数。
如果你想了解详细和根本的,看下面的(来自百度文库):
int printf(const char *format,[argument]);
format 参数输出的格式,定义格式为:%[flags][width][.perc][F|N|h|l]type
2.flags 规定输出格式,取值和含义如下:
无 右对齐,左边填充0和空格
- 左对齐,右边填充空格
+ 在数字前增加符号 + 或 -
0 将输出的前面补上0,直到占满指定列宽为止(不可以搭配使用-)
空格 输出值为正时冠以空格,为负时冠以负号
# 当type=c,s,d,i,u时没有影响
type=o,x,X时,分别在数值前增加'0',"0x","0X"
type=e,E,f时,总是使用小数点
type=g,G时,除了数值为0外总是显示小数点
3.width 用于控制显示数值的宽度,取值和含义如下
n(n=1,2,3...) 宽度至少为n位,不够以空格填充
0n(n=1,2,3...) 宽度至少为n位,不够左边以0填充
* 格式列表中,下一个参数还是width
4.prec 用于控制小数点后面的位数,取值和含义如下:
无 按缺省精度显示
0 当type=d,i,o,u,x时,没有影响
type=e,E,f时,不显示小数点
n(n=1,2,3...) 当type=e,E,f时表示的最大小数位数
type=其他,表示显示的最大宽度
.* 格式列表中,下一个参数还是width
希望有用。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-24
‘2’是字符2
(c-'2‘)的意思是,当你在键盘录入 5, (c-'2') = 3, 当录入 9, (c-’2‘)=7追问

'2‘是为什么不是代表ASCII代码值中的050呢?为什么不是与ASCII对应?怎么这样运算?

追答

'2'是代表50,’2‘的ascii值就是50呀,怎么没有对应?

追问

那就不对了啊,输入“2473Enter键”,程序结果是668977,就是按你说的“(c-'2‘)的意思是,当你在键盘录入 5, (c-'2') = 3, 当录入 9, (c-’2‘)=7”这样运算的,它是先读一个“2”,c=2,switch后是0,case0,再case,1,再case2,结果是66。后面4对应8,7对9,3对77,结果就是668977了,没有把'2'当做050来运算那,纠结了

追答

程序执行的很正确
当你录入2时,switch(c-'2') 执行 case 0(case 1):和case 2:因为case 2才有break, 所以会输出两个c+4, 也就是两个2+4,结果是 66
当录入4时,switch(c-'2') 执行 case 2:输出一个c+4, 也就是4+4,结果是 8
当录入7时,switch(c-'2') 执行 default:输出一个c+2, 也就是7+2,结果是 9
当录入3时,switch(c-'2') 执行case 1 和 case 2:出两个个c+4, 也就是两个3+4,结果是 77

所以最终的结果是 668977

本回答被提问者采纳
第2个回答  2012-02-06
‘2’ 对应的10进制是50
getchar有一个int型的返回值. 你把c来接受这个返回值
getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1
第3个回答  2012-02-06
代表一个字符,与ASCII对应,char a = '2';追问

c=getchar()每次只读取一个字符吗?'2‘是为什么不是代表ASCII代码值中的050呢?关键是switch(c-'2')这里不懂

第4个回答  2012-02-06
2473,分别对应ascii“50,52,55,51”,你的swich语句写的不对,请修改成
#include<stdio.h>
main()
{int c;
while((c=getchar())!='\n')
{switch(c-'2')
{case 0:;break;
case 1:putchar(c+4);break;
case 2:putchar(c+4);break;
case 3:putchar(c+3);break;
default:putchar(c+2);break;
}
}
printf("\n");
}
如果把switch中的purtchar语句全部改成与printf("%d",c+i),i是你定义加几的数值,例如4就填4,
你输出2473后,就会出来56,59,55数值,与你要算出的结果一致。