c语言中“switch(c-'2')和switch (c-2)有什么区别?

有个C语言的问题,switch语句中switch(c-'2')和switch(c-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;
}
}
}
如果用switch(c-'2'),‘输入数字2473时答案为668977,如果用switch(c-2)答案为4695..
请高手给予分析为盼,谢谢。

第1个回答  2013-02-12
'2'是字符 像abc一类的 c-'2'要减去2的ASII值
第2个回答  2013-02-13
'2'和'a','b','c'相似输出%d为ASCII值,但2是数字输出%d为2。
第3个回答  2023-06-19
在 switch 语句中,switch(c-'2') 和 switch(c-2) 的区别在于计算表达式的值的方式不同。
switch(c-'2') 的表达式值为 c 减去 '2' 的 ASCII 码值,得到的值范围是 0 到 3。而 switch(c-2) 的表达式值为 c 减去 2,得到的值范围是 0 到 3585(如果 c 是字符类型,则是 0 到 1023)。
因此,两种方式得到的结果不同。在您的代码中,使用 switch(c-'2') 时,当输入数字为 2473 时,表达式值为 3,程序会执行 case 3 对应的代码块,即 putchar(c+3),最终输出结果为 668977。而使用 switch(c-2) 时,表达式值为 445,程序会执行 default 对应的代码块,即 putchar(c+2),最终输出结果为 4695。
要正确地编写代码,应该使用 switch(c-'2'),并将 case 语句中的 putchar 函数分别放在不同的 case 语句中,同时在 default 语句中添加 break 语句,以避免执行后续的代码块。修改后的代码如下所示:
c
复制代码
#include <stdio.h>

int main() {
int c;
while ((c = getchar()) != '\n') {
switch (c - '2') {
case 0:
putchar(c + 4);
break;
case 1:
case 2:
putchar(c + 4);
break;
case 3:
putchar(c + 3);
break;
default:
putchar(c + 2);
break;
}
}
return 0;
}