zoukankan      html  css  js  c++  java
  • 【C】getchar()在C程序中的妙用!

      getchar()在C程序中的功能是接收一个字符,当我们在连续输入字符的时候getchar()会给你意想不到的效果。下面是net小伙做的一些测试:

    首先看下面的这个程序:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 int main(void)
     4 {
     5     int a,b,c;
     6     printf("please input num a:\n");
     7     scanf("%d",&a);
     8     printf("please input num b:\n");
     9     scanf("%d",&b);
    10     printf("please input num c:\n");
    11     scanf("%d",&c);
    12     printf("%d,%d,%d",a,b,c);
    13 }

    运行结果可想而知:

    那么把int改成char之后会是神马结果呢?来看下一段代码:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 int main(void)
     4 {
     5     char a,b,c;
     6     printf("please input num a:\n");
     7     scanf("%c",&a);
     8     printf("please input num b:\n");
     9     scanf("%c",&b);
    10     printf("please input num c:\n");
    11     scanf("%c",&c);
    12     printf("%c,%c,%c",a,b,c);
    13 }

    你能猜到运行结果是什么吗?

    为什么会显示这样的结果?你猜到是什么原因了吗?

    我们再来看一下源代码:程序连续接收了三个字符,在C中enter键代表一个换行符,所以当输入完a的值‘q’之后按下enter键,换行符立马被字符b接收了,然后程序再向下走,输入c的值‘w’。结果就会按顺序显示a,b,c的值,我们已经知道a='q',b='\n',c='w';所以结果就会显示两行。

    如果我们加入getchar()会有什么结果呢?

    我们再来看一下改进的程序:

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 int main(void)
     4 {
     5     char a,b,c;
     6     printf("please input num a:\n");
     7     scanf("%c",&a);
     8     getchar();
     9     printf("please input num b:\n");
    10     scanf("%c",&b);
    11     getchar();
    12     printf("please input num c:\n");
    13     scanf("%c",&c);
    14     printf("%c,%c,%c",a,b,c);
    15 }

    显示结果如下:

    现在为什么会正常显示我们想要的结果呢?原因就是getchar()把enter键所表示的字符接收了,所以就会达到想要的效果了。

    到现在你应该明白为什么会出现这种情况了吧!无非就是输入的规范问题,如果我们运行第二个程序,用另一种方法输入看看会是神马效果:

    看到没?也可以获取想要的结果,但是程序并不是这么美观了,为什么会出现这种效果呢?

    因为编译器规定输入的时候并不是立即回显,而是存到一个缓冲区里面。当遇到换行字符会释放缓冲区的数据,并清空缓冲区。

    scanf()在读取数字时会跳过空格、制表符和换行符!

  • 相关阅读:
    传递函数笔记
    模糊控制算法详细讲解
    SDRAM学习笔记
    基于STM32的CRC校验说明
    如何把图片设置成24位图/8位图??
    C2MIF软件使用说明
    ROM和RAM的内存详细说明
    Logback配置
    Logback使用
    common-logging源码解析
  • 原文地址:https://www.cnblogs.com/ngnetboy/p/2756534.html
Copyright © 2011-2022 走看看