标题:请大家帮我看看这个程序
只看楼主
c语言交流
Rank: 1
等 级:新手上路
帖 子:10
专家分:1
注 册:2012-7-24
得分:0 
k的初值和switch语句主体中的3个case的设计约束着只能the连续读入才能使n值自增

k初值为0,当读入为t,k值自增,当紧接下来读入为h,执行第二个case后面的语句,此时if(k==1)为真,k自增为2,当读入第三个字符为e,执行第三个case后面的语句,此时if(k==2)为真,k自增为3    swith后面的if(k=3)语句为真,n值自增



当th e时,读入到三个字符时候为空格,空格是switch语句中的case后面所没有的常量表达式,所以此时执行default后面的语句,使得k归零,k为零后面n自然不能完成自增

[ 本帖最后由 c语言交流 于 2012-7-25 00:22 编辑 ]
2012-07-25 00:20
qq3439819
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-7-25
得分:0 
好玩~
2012-07-25 03:05
yafei900914
Rank: 1
等 级:新手上路
帖 子:3
专家分:2
注 册:2012-7-15
得分:0 
程序执行  a the asdftheth e there.
当执行 a the asdftheth 时,此时程序执行到case语句CASE “h”:k++;break;K=2;
但是下一个字符是空格,导致CASE语句执default,将K复位为0,这样n就为3.
2012-07-25 07:42
xuhowe823
Rank: 2
等 级:论坛游民
帖 子:7
专家分:13
注 册:2010-10-12
得分:0 
11楼已经说得够详细了。空格也是字符,你问你能忽略这个呢?
2012-07-25 08:20
jtx0329
该用户已被删除
得分:0 
回复 10楼 三土。
提示: 作者被禁止或删除 内容自动屏蔽
2012-07-25 16:12
小无相
Rank: 2
等 级:论坛游民
帖 子:35
专家分:39
注 册:2012-7-24
得分:0 
三楼正解
2012-07-25 19:19
快乐可口可乐
Rank: 1
等 级:新手上路
帖 子:10
专家分:1
注 册:2012-7-16
得分:0 
那是因为getchar函数会把空白都算进去的 所以那个不连着的THE就不会使n加一的
2012-07-25 21:11
三土。
Rank: 1
等 级:新手上路
帖 子:26
专家分:7
注 册:2012-7-21
得分:0 
嗯,是空格问题
2012-07-25 21:56
aglence
Rank: 1
等 级:新手上路
帖 子:63
专家分:2
注 册:2012-7-6
得分:0 
#include<stdio.h>
void main(){
char x;int n=0,k=0;
while((x=getchar())!='.'){
    switch(x){
     case 't':k++;break;
     case 'h':if(k==1) k++;break;
     case 'e':if(k==2) k++;break;
     default:k=0;
    }
    if(k==3) n++;//这里改成++n才对,否则会比实际的少一个
}
printf("%d\n",n);
}
2012-07-26 00:45



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




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

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