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

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

例.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是否是回车,是回车,直接执行下一次循环的判断条件,也就是光标处(等待输入)。

  • 31
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值