zoukankan      html  css  js  c++  java
  • c语言输入的一些问题

    首先要先说一下缓冲区的概念,c语言标准库的输入函数都是从缓冲区(stdin)读取数据,而不是直接从键盘(或者说键盘缓冲区)读取。

    回显地概念:输入时,输入的数据显示在控制台终端,无回显则不显示

    scanf()

       1、在输入多个数值数据时,若格式控制串中没有非格式字符作输入数据之间的间隔则可用空格,TAB或回车作间隔。

      2、C编译在碰到空格,TAB,回车或非法数据(如对“%d”输入“12A”时,A即为非法数据)时即认为该数据结束。

        3、scanf()的格式控制串可以使用空白字符或其它非空白字符,使用空白字符会使scanf()函数在读操作中略去输入中的一个或多个空白字符。

           scanf("%c%c%c",&a,&b,&c) 输入“d e f”时,a='d' , b=' ',c='e'

           scanf("%c %c %c",&a,&b,&c) 输入“d e f”时,a='d' , b='e',c='f'

           scanf("%c %c %c",&a,&b,&c) 输入“d   e   f”时,a='d' , b='e',c='f'

        4、scanf("%d,%d,%d",&a,&b,&c);中%d,%d,%d之间有逗号(或者其他字符),在输入数据时也要加逗号,如果去掉逗号,输入时就不用逗号,而用空格,tab键或回车键将各个数据隔开

        5、控制格式还可以使用扫描集%[]

           scanf("%s",buf)  输入“what are you” 时,buf里面是“what”

           scanf("%[a-z|' ']",buf)  相同的输入,buf里面是“what are you”,控制集表示接受小写字母和空

           格,当然也可以用gets(buf)实现。

        6、对于double类型的变量,输入时不能用%f,一定要用%lf

        7、当我们输入一个数据并且按下enter键时,这个enter键相当于输入了一个回车符\r和换行符\n,scanf会自动处理调\r,当时\n还依然在输入缓冲中,因此以下情况:

           scanf("%d",&a); scanf("%c",&c);

           输入“123”敲enter键,当我们准备在输入一个字符时,程序结束了,其实这个时候a赋值为123,c赋值

           为‘\n’

         8、scanf会把不合适的输入保存在缓冲区中,以下程序会出现无限循环

            while(scanf("%d",&zs)==0)
              {
                 printf("a");
               }

         9、scanf不会立刻响应用户的输入,直到enter键被按下,因此不适合于即时响应用户输入的程序

    ------------------------------------------------------------- 

    getchar()

        1、从缓冲区stdin读取数据,同scanf一样以按下enter键作为输入标志,每次只从stdin中读取一个字符

           c=getchar();      输入“asdf”,敲enter,c的值为a; 什么都不输入,直接敲enter,c的值为

          ‘\n’('\r'被虑去)。在上例7中一般用getchar吸收掉stdin中的‘\n’。

    --------------------------------------------------------------

    getch()和getche()

         1、需要的头文件是<conio.h>。conio.h不是C标准库中的头文件。conio是Console Input/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作

        

         2、getch从控制台无回显地取一个字符,而getche带回显

         3、两者都是立即从控制台读取数据,不以enter键作为输入标志,也不通过缓冲区stdin,即他们会立即响应用户的输入

           c=getch()或c=getche()  直接敲enter键, c的值为‘\r’

           a=getchar(); c=getch()或c=getche(); 输入“1”敲enter键,a的值为‘1’,c还在等待输入,因为虽然敲了enter键,但是enter键代表的‘\r’‘\n’已经被读入stdin了,c在控制台没有可读取的字符。

           c=getch()或c=getche(); a=getchar();  直接敲enter键,c为‘\r’,a等待输入。

    -----------------------------------------------------------------

    gets()

       

        从stdin输入一个字符串,可以接受空格、tab,以enter作为输入结束标志

        gets(buf);  输入“1 2    3” 敲enter,buf值为"1 2    3".

    ------------------------------------------------------------------

    getc()

       

        从流中读取数据,原型为 int getc(FILE *stream),一般用于文件的读取,当getc(stdin)时相当于getchar()。

    【版权声明】转载请注明出处 http://www.cnblogs.com/TenosDoIt/archive/2013/04/15/3022002.html

  • 相关阅读:
    js中的匿名函数
    js在函数中未定义的变量的处理
    js中的isNaN()函数
    js中boolean类型的理解
    instanceof关键字
    js
    toString 方法在数组中的使用
    java中public private protected default的区别
    韩信点兵(hanxin)
    阶乘之和 输入n,计算S=1!+2!+3!+…+n!的末6位(不含前导0)。n≤10 6 ,n!表示 前n个正整数之积。
  • 原文地址:https://www.cnblogs.com/TenosDoIt/p/3022002.html
Copyright © 2011-2022 走看看