鱼C论坛

 找回密码
 立即注册
查看: 1824|回复: 17

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

[复制链接]
发表于 2016-1-19 13:46:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目要求我输入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;
                }
        }
}
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-1-19 15:22:33 | 显示全部楼层
不知道你的意图是什么了!
switch (ch - '1');这里是字符ch的ascii码减‘1’的ascii码
putchar(ch + 3);这里又是ch的ascii码+3
main() 函数有返回值;
case 和 break一起使用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-19 16:00:24 | 显示全部楼层
少一个break。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-19 16:00:46 | 显示全部楼层
第六行的case应该和break连用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-19 16:01:39 | 显示全部楼层
case:0为什么要加上呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-19 16:02:56 | 显示全部楼层
而且你输入的是字符,转换为整数型的话就是ASCII码 那也就是说输入的字符的对应的ASCII码加上对应的数字了。改成scanf怎么样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-19 16:44:50 | 显示全部楼层
题目就是这样的
无标题.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

题目就是这样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

题目就是这样的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-19 17:37:24 | 显示全部楼层

那既然这个是题目的话,你的输出结果应该是对的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-19 17:38:05 | 显示全部楼层

不过我纠个错void main()最好改成int main(void)或者int main(int argc,char *argv[])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-19 17:47:49 From FishC Mobile | 显示全部楼层
黑龍 发表于 2016-1-19 17:37
那既然这个是题目的话,你的输出结果应该是对的

要怎么输出这个结果的,我搞不懂(=_=),我想要知道这个程序什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

那我们都回答你了啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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(用词不知道对不对 大概就是这意思)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-21 09:06:13 | 显示全部楼层
while ((ch = getchar()) != '#')                   getchar()  是字符串   没有指针或者下标根本没有办法判断字符串是否是‘#’,   估计只有独立输入‘#’时才能break

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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-1-21 12:47:30 | 显示全部楼层
catalina 发表于 2016-1-20 22:42
结果没错  输入的是123 (因为是getchar 所以这里123是‘1’,’2‘,’3‘ ) 当1的时候 1-1=0  匹配到cas ...

噢噢,这样啊,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-22 17:48:04 | 显示全部楼层
向楼主学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-1-24 22:51:47 | 显示全部楼层

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 18:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表