C语言编程getchar()的问题while((ch=getchar()) !='\n')程序输出结果字符跳着转换如果拆开写ch=getchar()

#include &lt;stdio.h&gt;<br />#include &lt;ctype.h&gt;<br />#define SPACE &#39; &#39; <br />int main(void)<br />{<br /> char ch;<br /> ch=getchar();<br /> while(ch !=&#39;&#92;n&#39;)<br /> { if(ch==SPACE)<br /> putchar(ch);<br /> else<br /> putchar(ch+1);<br /> ch=getchar();<br />}<br /> putchar(ch);<br /> return 0;<br />}<br />这么写输入abcdef输出bcdefg<br /><br />#include &lt;stdio.h&gt;<br />#include &lt;ctype.h&gt;<br />#define SPACE &#39; &#39; <br />int main(void)<br />{<br /> char ch;<br /> while((ch=getchar())!=&#39;&#92;n&#39;)<br /> { if(ch==SPACE)<br /> putchar(ch);<br /> else<br /> putchar(ch+1);<br /> ch=getchar();<br />}<br /> putchar(ch);<br /> return 0;<br />}<br />这么输入abcde输出bdf只输出3个,为什么啊,求大神指点~
关键在于while(ch !='\n')和while((ch=getchar())!='\n')的不同啊,因为getchar()相当于接收字符嘛,而你第二个程序除了while()里有一个getchar(),{}语句里面也有个getchar(),它也是可以接受一个字符的,所以他把你的输入的b,d接收了,但是你ch接收到的是while()里面输入的即a,c,e,所以经过了下面处理只输出了bdf
#include <stdio.h>
#include <ctype.h>
#define SPACE ' ' 
int main(void)
{
char ch;
while((ch=getchar())!=' ')  //这里一次getchar
     {   if(ch==SPACE)
putchar(ch);
else
putchar(ch+1);
       //ch=getchar();  //这里一次getchar,这一次的就没有了,这句话注释掉就可以了
}
putchar(ch);
return 0;
}
当你输入abcdef后,输入缓冲区有7个字符,“abcdef\n",多了一个回车。
while循环第一次:
getchar读取到第一个字符‘a',赋值给ch,非空格,进入else,输出’a'+1,即‘b',然后又getchar读取到第二个字符’b',本次循环结束,准备进入第二次循环;
while循环第二次:
getchar读取到第三个字符‘c',赋值给ch,非空格,进入else,输出’c'+1,即‘d’,然后又getchar读取第四个字符‘d’,本次循环结束,准备进入第三次循环;
while循环第三次:
getchar读取到第五个字符‘e',赋值给ch,非空格,进入else,输出’e'+1,即‘f',然后又getchar读取第六个字符’f‘,本次循环结束,准备进入第四次循环;
whle循环第四次:
getchar读取到第七个字符’\n',赋值ch,循环条件不成立,循环终止;

运行putchar输出ch,此时ch为‘\n';即输出换行。
所以全部输出为:bdf然后还有一个换行符。
函数返回。
当你输入abcdef后,输入缓冲区有7个字符,“abcdef\n",多了一个回车。
while循环第一次:
getchar读取到第一个字符‘a',赋值给ch,非空格,进入else,输出’a'+1,即‘b',然后又getchar读取到第二个字符’b',本次循环结束,准备进入第二次循环;
while循环第二次:
getchar读取到第三个字符‘c',赋值给ch,非空格,进入else,输出’c'+1,即‘d’,然后又getchar读取第四个字符‘d’,本次循环结束,准备进入第三次循环;
while循环第三次:
getchar读取到第五个字符‘e',赋值给ch,非空格,进入else,输出’e'+1,即‘f',然后又getchar读取第六个字符’f‘,本次循环结束,准备进入第四次循环;
whle循环第四次:
getchar读取到第七个字符’\n',赋值ch,循环条件不成立,循环终止;

运行putchar输出ch,此时ch为‘\n';即输出换行。
所以全部输出为:bdf然后还有一个换行符。
函数返回。
关键在于while(ch !='\n')和while((ch=getchar())!='\n')的不同啊,因为getchar()相当于接收字符嘛,而你第二个程序除了while()里有一个getchar(),{}语句里面也有个getchar(),它也是可以接受一个字符的,所以他把你的输入的b,d接收了,但是你ch接收到的是while()里面输入的即a,c,e,所以经过了下面处理只输出了bdf
#include <stdio.h>
#include <ctype.h>
#define SPACE ' ' 
int main(void)
{
char ch;
while((ch=getchar())!=' ')  //这里一次getchar
     {   if(ch==SPACE)
putchar(ch);
else
putchar(ch+1);
       //ch=getchar();  //这里一次getchar,这一次的就没有了,这句话注释掉就可以了
}
putchar(ch);
return 0;
}
http://zhidao.baidu.com/question/1383295779810416660.html