求大神解释下这个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;
}
}
} 不知道你的意图是什么了!
switch (ch - '1');这里是字符ch的ascii码减‘1’的ascii码
putchar(ch + 3);这里又是ch的ascii码+3
main() 函数有返回值;
case 和 break一起使用 少一个break。。。 第六行的case应该和break连用 case:0为什么要加上呢 而且你输入的是字符,转换为整数型的话就是ASCII码 那也就是说输入的字符的对应的ASCII码加上对应的数字了。改成scanf怎么样 题目就是这样的 黑龍 发表于 2016-1-19 16:02
而且你输入的是字符,转换为整数型的话就是ASCII码 那也就是说输入的字符的对应的ASCII码加上对应的数字了 ...
题目就是这样的 ligen超越 发表于 2016-1-19 15:22
不知道你的意图是什么了!
switch (ch - '1');这里是字符ch的ascii码减‘1’的ascii码
putchar(ch + 3) ...
题目就是这样的 Scoundrel丶You 发表于 2016-1-19 16:46
题目就是这样的
那既然这个是题目的话,你的输出结果应该是对的 Scoundrel丶You 发表于 2016-1-19 16:46
题目就是这样的
不过我纠个错void main()最好改成int main(void)或者int main(int argc,char *argv[]) 黑龍 发表于 2016-1-19 17:37
那既然这个是题目的话,你的输出结果应该是对的
要怎么输出这个结果的,我搞不懂(=_=),我想要知道这个程序什么意思 Scoundrel丶You 发表于 2016-1-19 17:47
要怎么输出这个结果的,我搞不懂(=_=),我想要知道这个程序什么意思
那我们都回答你了啊 结果没错输入的是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(用词不知道对不对 大概就是这意思) while ((ch = getchar()) != '#') getchar()是字符串 没有指针或者下标根本没有办法判断字符串是否是‘#’, 估计只有独立输入‘#’时才能break
可以将while中的条件用结构写出来一部分为其他部分,一部分为‘#’,此时while调用XXX.‘#’就可以了
输入其他字符,进入循环,输入‘#’,不进入循环,不需要再加break。
catalina 发表于 2016-1-20 22:42
结果没错输入的是123 (因为是getchar 所以这里123是‘1’,’2‘,’3‘ ) 当1的时候 1-1=0匹配到cas ...
噢噢,这样啊,谢谢 向楼主学习 Scoundrel丶You 发表于 2016-1-19 16:44
题目就是这样的
我认为是,输入的“123#”的asca码对应的数字+3再+3
页:
[1]