Scoundrel丶You 发表于 2016-1-19 13:46:27

求大神解释下这个C语言的程序

题目要求我输入123#,得出结果是什么,可是我完全看不懂输入123#得到的答案为什么是44556#include<stdio.h>
void main()
{
      char ch;
      while ((ch = getchar()) != '#')
      {
                switch (ch - '1')
                {
                case 0:
                case 1:putchar(ch + 3);
                case 2:putchar(ch + 3); break;
                default:break;
                }
      }
}

ligen超越 发表于 2016-1-19 15:22:33

不知道你的意图是什么了!
switch (ch - '1');这里是字符ch的ascii码减‘1’的ascii码
putchar(ch + 3);这里又是ch的ascii码+3
main() 函数有返回值;
case 和 break一起使用

黑龍 发表于 2016-1-19 16:00:24

少一个break。。。

黑龍 发表于 2016-1-19 16:00:46

第六行的case应该和break连用

黑龍 发表于 2016-1-19 16:01:39

case:0为什么要加上呢

黑龍 发表于 2016-1-19 16:02:56

而且你输入的是字符,转换为整数型的话就是ASCII码 那也就是说输入的字符的对应的ASCII码加上对应的数字了。改成scanf怎么样

Scoundrel丶You 发表于 2016-1-19 16:44:50

题目就是这样的

Scoundrel丶You 发表于 2016-1-19 16:45:35

黑龍 发表于 2016-1-19 16:02
而且你输入的是字符,转换为整数型的话就是ASCII码 那也就是说输入的字符的对应的ASCII码加上对应的数字了 ...

题目就是这样的

Scoundrel丶You 发表于 2016-1-19 16:46:08

ligen超越 发表于 2016-1-19 15:22
不知道你的意图是什么了!
switch (ch - '1');这里是字符ch的ascii码减‘1’的ascii码
putchar(ch + 3) ...

题目就是这样的

黑龍 发表于 2016-1-19 17:37:24

Scoundrel丶You 发表于 2016-1-19 16:46
题目就是这样的

那既然这个是题目的话,你的输出结果应该是对的

黑龍 发表于 2016-1-19 17:38:05

Scoundrel丶You 发表于 2016-1-19 16:46
题目就是这样的

不过我纠个错void main()最好改成int main(void)或者int main(int argc,char *argv[])

Scoundrel丶You 发表于 2016-1-19 17:47:49

黑龍 发表于 2016-1-19 17:37
那既然这个是题目的话,你的输出结果应该是对的

要怎么输出这个结果的,我搞不懂(=_=),我想要知道这个程序什么意思

黑龍 发表于 2016-1-19 18:46:53

Scoundrel丶You 发表于 2016-1-19 17:47
要怎么输出这个结果的,我搞不懂(=_=),我想要知道这个程序什么意思

那我们都回答你了啊

catalina 发表于 2016-1-20 22:42:41

结果没错输入的是123 (因为是getchar 所以这里123是‘1’,’2‘,’3‘ ) 当1的时候 1-1=0匹配到case 0内容是空的 由于没有break 会继续向下执行 case 1,case 2 的内容 然后break所以 1的结果是 44 同理 2的时候匹配到 case 1 但也会向下执行 所以结果是55 而3的时候 匹配到case 2 结果就是6了因此44556(用词不知道对不对 大概就是这意思)

four 发表于 2016-1-21 09:06:13

while ((ch = getchar()) != '#')                   getchar()是字符串   没有指针或者下标根本没有办法判断字符串是否是‘#’,   估计只有独立输入‘#’时才能break

可以将while中的条件用结构写出来一部分为其他部分,一部分为‘#’,此时while调用XXX.‘#’就可以了

输入其他字符,进入循环,输入‘#’,不进入循环,不需要再加break。

Scoundrel丶You 发表于 2016-1-21 12:47:30

catalina 发表于 2016-1-20 22:42
结果没错输入的是123 (因为是getchar 所以这里123是‘1’,’2‘,’3‘ ) 当1的时候 1-1=0匹配到cas ...

噢噢,这样啊,谢谢

mrjzm 发表于 2016-1-22 17:48:04

向楼主学习

少先队员 发表于 2016-1-24 22:51:47

Scoundrel丶You 发表于 2016-1-19 16:44
题目就是这样的

我认为是,输入的“123#”的asca码对应的数字+3再+3

页: [1]
查看完整版本: 求大神解释下这个C语言的程序