关于getchar()输入字符后回车的几个例子

xiaoxiao2021-02-27  142

耐心看完这几个例子会很有收获

例.1 .

#include <stdio.h> int main() { char c; int n = 0; while ((c=getchar())!='a') { printf("%c,%d",c, n); } return 0; }

1. 输入: ssss回车 得到: ssss 光标处(等待输入) 其实循环执行了五次,前四次输出s,第五次输出的是回车,所以才会出现:输出ssss后下一行的光标出(等待输入)

2.如果我们输入: ssssa回车 得到: ssss 循环执行四次

例.2 .

#include <stdio.h> int main() { char c; while ((c = getchar()) != 'a') printf("%c",c); getchar(); c=getchar(); printf("%c",c); return 0; }

1.输入: ssss回车 得到: ssss 光标处(等待输入)

其实循环执行了五次,前四次输出s,第五次输出的是回车(缓冲区储存了

ssss回车五个字符),所以才会出现:输出ssss后下一行的光标出(等待输

入)

说明:此时程序没有结束,进行到while循环,因为并没有字符a出现,所以还没跳出

while循环.键入回车后,getchar依次从缓冲区内取出(while循环):’s”s”s”s”/n’

2. 如果我们输入: ssssa回车 得到: ssss光标处(等待输入)

说明:程序已经跳出while循环,但是由于我们用getchar();清除了换行’/n’,后

面第7句c=getchar();需要你输入一个字符(因为ssssa后面并没有新的字

符),所以程序仍然没有结束.如果我们注释掉getchar();这一句,代码如下:

``` #include <stdio.h> int main() { char c; while ((c = getchar()) != 'a') printf("%c",c); //getchar(); c=getchar(); printf("%c",c); return 0; }

如果我们输入: ssssa回车 得到 ssss 光标处(程序结束) 这个输入ssssa是的回车中的换行符’/n’就被c=getchar();这一句读取并输出了。

例3.

#include <stdio.h> int main() { char ch; while ((ch = getchar()) != '#') printf("Fine."); return 0; }

1.输入: 1234回车 得到: Fine.Fine.Fine.Fine.Fine.光标处(等待输入)

说明:ch依次被赋值1234回车,注意回车刷新缓冲区的同时也被赋值给ch,这个五个字符均不是‘#’故运行了五次,仍为跳出循环。

2.输入: 1234#回车 得到: Fine.Fine.Fine.Fine.光标处(程序结束)

说明:ch依次被赋值1234#回车,循环执行到#时候跳出,故循环只执行4此。

例4.想办法吃掉回车法1‘\n’

#include <stdio.h> int main() { char ch; while ((ch = getchar()) != '#') { getchar();//吃掉回车 printf("Fine."); } return 0; }

1.输入: 1回车 得到: Fine.光标处(等待输入)

说明:把1赋值给ch后,回车刷新缓冲区并把值给了getchar();//吃掉回车。

!!注意:这样只适合单个输入数据的,比如1回车,a回车这种。

如果同时输入两个数12回车,结果如下:

2.输入: 12回车 得到: Fine.光标处(等待输入)

说明:ch其实只接收了1和回车,流程如下,

1赋值给了ch执行循环、

2被getchar()// 吃掉回车 这个语句吃掉了

输出Fine.这个时候ch = 1

第二次循环,

回车的值被赋予了ch

执行到getchar()// 吃掉回车 这个语句时就会继续等待输入。

3.输入: 123回车 得到: Fine.Fine.光标处(等待输入)

说明:实际上ch只接收了1和3 的值,2和回车都被getchar()// 吃掉回车 这个语句吃掉了,运行流程如下:

1被赋值给ch执行循环

2被getchar()// 吃掉回车 吃掉了

输出Fine.

3被赋值给ch执行循环

回车被getchar()// 吃掉回车 吃掉了

输出Fine.继续等待输入ch的值

从例4的2 和3 可以看出此法会吞掉我们的数据,除单独输入如1回车,b回车这种情况外不建议使用。

例5. 想办法吃掉回车法1 ‘\n’

#include <stdio.h> int main() { char ch; while ((ch = getchar()) != '#') { if (ch == '\n') continue; printf("Fine."); } return 0; }

1 输入: 1回车 得到: Fine.光标处(等待输入)

执行流程如下:

1被赋值给ch

判断是不是回车

不是回车输出Fine.

回车被赋予ch,判断是不是空格,是空格,直接执行下一次循环判断条件也就是出现了 光标处(等待输入)

2. 输入: 123回车 得出; Fine.Fine.Fine.光标处(等待输入)

说明:程序依次被赋值123回车,流程如下

1被赋值给ch

进入循环体内判断 ch是否是回车,不是回车 输出 Fine.

2被赋值给ch

进入循环体内判断 ch是否是回车,不是回车 输出 Fine.

3被赋值给ch

进入循环体内判断 ch是否是回车,不是回车 输出 Fine.

回车赋值给ch

进入循环体内判断ch是否是回车,是回车,直接执行下一次循环的判断条件,也就是光标处(等待输入)。

转载请注明原文地址: https://www.6miu.com/read-13023.html

最新回复(0)