c语言输入的一些问题

转载 2016年08月29日 22:06:29

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


C语言的一些常见问题

一.static 关键字的作用1.隐藏,当我们同时编译多个文件时,所有未加 static 前缀的全局变量和函数都具有全局可见性. 2.static 的第二个作用是保持变量内容的持久.存储在静态数据区的...
  • xuehongnizhao
  • xuehongnizhao
  • 2016年01月21日 16:53
  • 627

C语言数据输入与输出

C语言数据输入与输出
  • ITTechnologyHome
  • ITTechnologyHome
  • 2016年06月02日 11:06
  • 10367

C语言输入与输出

调试环境:win10+vs2015 声明:本篇博客主要讲怎样使用C语言标准库里面的输入输出函数输入输出简单机制我们在使用输入输出函数的时候,不管是从文件还是控制台,它都是会先存放在缓冲区里面,但需要...
  • baidu_27435045
  • baidu_27435045
  • 2016年11月23日 22:53
  • 2019

C语言字符串输入与输出函数

字符串输入&输出
  • RHEL_admin
  • RHEL_admin
  • 2015年01月15日 14:57
  • 23380

C语言 文件的输入输出

文件的输入输出函数分为两大类 1.有缓冲区的输入输出(Buffered I/O)  数据先写到缓冲区,满了再写入文件 2.无缓冲区的输入输出(Unbuffered file I/O)  直接操作文...
  • xianyun2009
  • xianyun2009
  • 2014年02月07日 12:00
  • 2603

C语言-输入任意个字符串

来源网站: ==== http://bbs.csdn.net/topics/391045349?page=1#post-399279449 方法一: //输入任意个字符串 #includ...
  • u013147600
  • u013147600
  • 2015年06月01日 10:59
  • 2412

有关C语言中输入语句的问题

在C语言中输入的方法为scanf("");但是有些同学会出现一些问题常常使得在输入后程序无法继续运行或者根本就无法输入。这里列出一些我曾经遇见过得问题。 1. 输入语句为:scanf("a=...
  • zyc_123456
  • zyc_123456
  • 2015年12月20日 21:20
  • 1316

c语言由键盘输入不定长数组的元素

#include #define N 100 int main() {     int a[N],i=0,x,y,n,flag=0;     char ch;     /*while(sc...
  • fiona_tian2010
  • fiona_tian2010
  • 2016年06月26日 21:46
  • 3036

C语言输入一串数据到数组中,用空格隔开回车结束

自己是个新手,写一些程序供初学者和新手方便使用。 C语言输入一串数据到数组中,用空格隔开回车结束...
  • keseliugeizuori
  • keseliugeizuori
  • 2016年10月18日 20:26
  • 8136

c语言中输入输出格式的控制

C语言中输入格式与输出格式的控制
  • wangjiaweiwei
  • wangjiaweiwei
  • 2014年09月16日 14:12
  • 1388
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c语言输入的一些问题
举报原因:
原因补充:

(最多只允许输入30个字)