• getchar(),scanf()等总结


     

    getchar

    getch

    区别与用法

     

    已有

     

     

    getchar

    , getch, 

    区别

    用法

     

     

     

    getchar()

    getch()

    的问题一直困扰着大家,关于他们的区别也是众说纷纭,

    可没有一种说法是详细、

    深入的,

    今天我就在前人已有的成果上,

    试着与大家继

    续探讨下这个问题:

     

     

     

    先看看规范点的说法:

     

     getchar

     

     This is a standard function that gets a character from the stdin.

     

     getch

     

     This 

    is 

    nonstandard 

    function 

    that 

    gets 

    character 

    from 

    keyboard, 

    does 

    not echo to screen.

     

     getche

     

     This 

    is 

    nonstandard 

    function 

    that 

    gets 

    character 

    from 

    the keyboard, 

    echoes to screen.

     

     

    Use getchar if you want it to work on all compilers. Use getch or getche 

    on 

    system 

    that 

    supports 

    it 

    when 

    you 

    want 

    keyboard 

    input 

    without 

    pressing 

    [Enter].And 

    note 

    that 

    the 

    return 

    value 

    of 

    all 

    three 

    is 

    int! 

    You 

    need 

    this 

    to properly check for EOF.

     

     

     

     

    结合实际,谈谈具体的区别与用法:

     

    getchar

    ()函数只有在满足输入次数要求的前提下,遇到回车时才结束输入,

    之前所有的字符都会逐个显示在屏幕上,但是只有第一个字符返回一个

    ASCII

    码。

     

    具体的过程就是

    getchar()

    被调用时,程序就等着用户按键,且将用户输入的字

    符依次回显到屏幕,

    用户必须摁完规定的次数

    (循环语句)

    即使是

     

    回车也要摁)

    所有的字符都会保留在键盘缓存区中(回车字符也放在缓存区中

    )

    ,等待后续

    getchar

    调用读取。也就是说,后续的

    getchar

    调用不会

     

    等待用户按键,而直

    接读取缓冲区中的字符

    ,

    直到读完规定的次数后

    (并不是读完缓冲区的字符)

    等待用户按键。

     

     

     getch

    ()函数任何时候遇到回车键都能结束,而且不会回显输入的字符,但是

    每输入一个字符都会立即返回一个

    ASCII

    码。具体的过程就是,每摁一次键

     

    调用一次

    getch()

    ,直到遇回车结束。如果在规定次数前结束,系统论并没有存

    入结束符,我们要手动地在他末尾添加一个‘

    0’字符。这个也好理解,

     

    其实

    getchar()

    就相当于是翻译型的,他连回车字符也给翻译了,然后一起存入;而

    getch()

    是解释型的,

    每输入一条就翻译,

    然后存入,

    遇回车字

     

    符时刚翻译完是

    回车,所以他就得退出了。

     

    getch

    函数常用于程序调试中,

    在调试时,

    在关键位置显示有关的结果以待查看,

    然后用

    getch

    函数暂停程序运行,当按任意键后程序继续运行。

     
    我们看一个具体的例子:  Int I; 
    char tmp[20]; 
    for ( i=0  i<20; i++ ) { 
    tmp[i] = getch()  //关键点1 // tmp[i]=getchar(); 
     
    // putchar ( '*' )  
    printf ( "%d=[%c] ",i,tmp [i] )  if ( tmp[i] == ' ' ) { 
    tmp [i] = ''  //关键点2 break  }  } 
    大家先分析下上面这段代码的功能吧,这是一个最多为20位的密码输入功能,既然是密码我们当然不希望他显示原字符,像linux用户验证那样什么也 不显示,但有的时候为了直观一点,我们可以加入putchar(‘*’)语句,就像QQ密码在你每输入一个字符时,他就回显一个“*”号。大家不防把上面 的代码敲一边,自己运行试试。 
     
    接着上面的问题,为什么说读完规定的次数呢,实例中的for循环了20次,但我们在输入的时候可以输入30,50个字符,对系统来说反正是 放入缓冲区,放多少都是放,只不过在读取的时候只循环了20次,所以只能多20个字符,剩下的就被抛弃了。但是如果我们只想输入10个字符,那么你就得摁 剩下的10个回车键,因为getchar()输入的字符被存放在键盘缓冲区中.直到用户输入足够的次数(20次)按回车后才返回。因为在20次前,回车也 是当做一个普通字符存入缓存区的。 
    也就是说,如果你的按键超过20次getch()自动结束,而getchar()没有任何提示,但在下次调用时只取前20个有效字符。如果你的按键不足20次,getch()遇到回车就退出,但是getchar()你必须按足20次后遇回车才结束, 
    细心的朋友会发现,调用getchar()时真正输入的字符只有19个,因为系统默认把第一个字符设为‘’

    NO.1

    //**********

    #include <stdio.h>
    void main()
    {
        int i;
        char  en;
        for (i=0;i<10;i++)
       {
          printf("Input:");
          en=getchar();
          switch(en)
         {
             case 'a':
                 printf("a ");
                 break;
             case 'b':
                 printf("b ");
                 break;
             default:
                 printf("other! ");
                 break;
         }
      }
    }

    在这段代码中
    不管是输入a,还是b
    最后的输出总是(比如a)
    Input:a
    a
    Input:other!

    //******************

    #include <stdio.h>
    int main()
    {
        int i;
        char  en;
        for (i=0;i<10;i++)
       {
          printf("Input:");
          en=getchar();
          getchar();
          switch(en)
         {
             case 'a':
                 printf("a ");
                 break;
             case 'b':
                 printf("b ");
                 break;
             default:
                 printf("other! ");
                 break;
         }
      }
    }

    getchar是字符输入函数,假设我们同时输入aaa,它只会判断两个a,中间那个a就会被getchar吃了,switch()不会判断,所以建议用scanf("%c",&en);而scanf("%s",&en);字符串只会判断字符串的第一个字母!

    //************************

    #include <stdio.h>
    void main()
    {
        int i;
        char  en;
        for (i=0;i<10;i++)
       {
          printf("Input:"); scanf("%c",&en);/*此时为字符*/
        /*  en=getchar();此时为字符串
          getchar();  */
          switch(en)
         {
             case 'a':
                 printf("a ");
                 break;
             case 'b':
                 printf("b ");
                 break;
             default:
                 printf("other! ");
                 break;
         }
      }
    }

    //******************

  • 相关阅读:
    HDU dp递推 母牛的故事 *
    自制权限框架(二)注解
    自制权限框架(二)注解
    自制权限框架(二)注解
    自制权限框架(二)注解
    iOS Sprite Kit教程之申请和下载证书
    iOS Sprite Kit教程之申请和下载证书
    iOS Sprite Kit教程之申请和下载证书
    白领创业做起了小龙虾的生意,如今公司日销售额达30万元
    她将小镇上的童装生意做到了线上,这位夫妻因此获得了大丰收
  • 原文地址:https://www.cnblogs.com/ganeveryday/p/4375465.html
Copyright © 2020-2023  润新知