标题:switch语句
只看楼主
xuexuexue
Rank: 1
等 级:新手上路
帖 子:118
专家分:0
注 册:2004-7-19
 问题点数:0 回复次数:8 
switch语句

#include "stdio.h"

main()

{int s;

while ((s=getchar())!='\n')

}

switch (s-'2')

{case 0:

case 1:putchar (s+4);

case 2:putchar (s+4);break;

case 3:putchar (s+3);

default : putchar (s+2);break;

}

}

printf ("\n");

}

运行时输入2473回车,答案是多少?

switch (s-'2')这条语句其中的2是不是指他的码?

搜索更多相关主题的帖子: switch 语句 case putchar break 
2004-07-26 09:23
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
得分:0 
你得代码有错误,检查一下

我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2004-07-26 10:01
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 

#include "stdio.h" main() { int s; while((s=getchar())!='\n') switch(s-'2') { case 0: case 1:putchar (s+4); case 2:putchar (s+4);break; case 3:putchar (s+3); default : putchar (s+2);break; } printf ("\n"); }

首先,你的程序不可能通过编译~多了两个 } 我帮你改正了 然后我们来分析一下这个程序如果输入2473会输出什么东西来。但在此之前,我先得告诉你'2'是什么意思。 其实'2'的意思很简单,就是2的ASCII码,那s-'2'的意思自然就是变量s存储的你按下按键的ascii码 减去 2的ascii码。例如,如果你按下3,那s的值就为51,s-'2'也就等于51-50=1了

好了,我们继续 ① while就不用我说了吧,输入s ② 我们输入的是2473, [1]系统先对'2'-'2'进行switch判断: case 0: 成立,没遇到break;语句, 继续向下执行putchar(s+4);输出6,没遇到break;语句, 继续向下执行putchar(s+4);输出6,遇到break;语句,终止判断 [2]然后对'4'-'2'进行switch判断: case 2: 成立,执行putchar(s+4);输出8,遇到break;语句,终止判断 [3]对'7'-'2'进行switch判断: default: 成立,执行putchar(s+2),输出9,遇到break;语句,终止判断 [4]对'3'-'2'进行switch判断: case 1: 成立,执行putchar(s+4),输出7,没遇到break;语句, 继续向下执行putchar(s+4),输出7,遇到break;语句,终止判断

由上面得知:如果我们输入2473,那系统将会输出668977

我晕,打得我满身大汉,我不知道怎么组织语言,只好说得很多,很罗嗦,请见谅。


淘宝杜琨
2004-07-26 10:09
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
比乌鸦抢先一步,哈哈

淘宝杜琨
2004-07-26 10:10
xuexuexue
Rank: 1
等 级:新手上路
帖 子:118
专家分:0
注 册:2004-7-19
得分:0 
谢谢,我明白了

C语言让我感爱到了计算机的乐趣 目前目标:程序员
2004-07-26 12:20
幽深
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2004-7-5
得分:0 

while((s=getchar())!='\n')

这里类型是怎么转换的?

具体点解释一下呗


如果将英文字母A到Z分别编上1—26的分数,(A=1,B=2,...Z=26)那么: 知识(knowledge)得到96分(11+14+15+23+12+5+4+7+5=96) 努力(hardwork)也只得98分(8+1+18+4+23+15+18+11=98) 态度(attitude)才是左右生命的全部(1+20+20+9+20+21+4+5=100)
2004-07-26 16:23
阿一2004
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2004-7-24
得分:0 

可是我认为:

getchar()是一个字符输入函数,

只能接受一个字符,

所以的话,当我们输入2473的时候,系统应该只会识别为2呀。

而楼主在语句里竟然少了两个break,实在不应该呀。

2004-07-26 18:23
阿一2004
Rank: 1
等 级:新手上路
帖 子:68
专家分:0
注 册:2004-7-24
得分:0 

基本不同意神的意见,

你少了楼主的两个}

以我的想法,楼主的意思楼主的第一个}用反了,

应改为{

这样应该就可以通过编译了吧。

请“神”指教一二。

2004-07-26 18:28
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 

楼主是用反了,我也看见了,但是那对{}是多余的。switch()被看成是一个语句,既然本来就多余,那也就没有保留的必要啦~

至于说楼主少了break; 我想也许是题目本来就没有的吧。

while((s=getchar())!='\n') 这句的意思就不说了吧,就说说他是怎么转换的

因为s是个整形变量,如果一个字符常量被赋予到了一个整形变量后,那个整形变量的值将会是其ASCII码。例如:int s='a' 那么printf("%d",s); 后,我们将会看到输出97。

至于getchar是个单字符输入函数,这是没错。但是用在循环中却可以起到按顺序输入的效果。具体原因我想还得从 stdio.h 中找。先举个例子:自己慢慢领悟吧

#include <stdio.h> main() { int s,i; for(i=0;i<=10;i++) { s=getchar(); /*输入字符,按回车键结束输入,如果没输够10个,继续输入;超过10个,则取前面10个按键值。*/ printf("\n%d",s); } }

[此贴子已经被作者于2004-07-26 19:36:48编辑过]


淘宝杜琨
2004-07-26 19:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-3616-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.135628 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved