主题:switch的问题?觉得很诡异···
嗯,书上的一个习题,说输入一行字符,如果中间有多个空格就将其合并成一个空格,然后···编了个程序,用的是switch语句,后来检查发现了一个问题,但是运行又没问题,感觉很诡异,不明白最后的结果是怎么达到的···嗯,我先把程序贴出来吧
#include "stdio.h"
#define COPY 0
#define START 1
#define END 2
#define SPACE ' '
void main()
{
char c,state;
state=COPY;
while((c=getchar())!='\n')
switch(state){
case COPY:
if(c==SPACE)
{
state=START;
putchar(c);
break;
}
case START:
if(c==SPACE) state=END;
else putchar(c);
case END:
if(c==SPACE)
{
state=START;
break;
}
else state=COPY;
}
}
问题在 “case COPY:” 这里,按理来说,如果第一个字符不是空格,那么case COPY 后面的语句应该不会执行,但是这个时候 state 的值仍然是“COPY”,按理来说,第一个字符应该不会输出,但是实际上它们还是出来了,这是运行结果:
输入:hi this is a program by liu
输出:hi this is a program by liu
为什么会这样呢???嗯,我不是要正确的程序,因为我自己已经改好了,就是希望懂的人来解释一下,为什么会这样捏~~~
[img]http://[/img]
#include "stdio.h"
#define COPY 0
#define START 1
#define END 2
#define SPACE ' '
void main()
{
char c,state;
state=COPY;
while((c=getchar())!='\n')
switch(state){
case COPY:
if(c==SPACE)
{
state=START;
putchar(c);
break;
}
case START:
if(c==SPACE) state=END;
else putchar(c);
case END:
if(c==SPACE)
{
state=START;
break;
}
else state=COPY;
}
}
问题在 “case COPY:” 这里,按理来说,如果第一个字符不是空格,那么case COPY 后面的语句应该不会执行,但是这个时候 state 的值仍然是“COPY”,按理来说,第一个字符应该不会输出,但是实际上它们还是出来了,这是运行结果:
输入:hi this is a program by liu
输出:hi this is a program by liu
为什么会这样呢???嗯,我不是要正确的程序,因为我自己已经改好了,就是希望懂的人来解释一下,为什么会这样捏~~~
[img]http://[/img]