C/C++ACM入门之输入函数格式控制

C的输入函数scanf比C++的输入含税cin快多了,所以在进行大规模数据录入的时候,一般是使用scanf 

关键字: 
空白:包括space Tab Enter 
扫描前导空白:即扫描缓冲区中的空格,并丢弃 


C输入函数 scanf 、gets、 fgets 、getchar() scanf(只介绍格式控制符是 %c、%s的情况) 
--%s读一个字符串 ,会扫描前导空白,遇到空白结束。 
 如果输入的字符串过长,超过字符数组的长度-1,那么运行的时候就会 瞪一声,然后结束运行。
   char str[10];
   scanf("%s",str);
    cout<<str;
   //输入     空格空格abcd ef
   //输出     abcd  
--%c读取一个字符,不会扫描前导空白。 
 所以如果缓冲区有遗留下来的空格,那就%c就可能不会读取到你所希望的字符。
   char ch;
    char str[10];
   scanf("%s",str);
   scanf("c",&ch);
   //输入    abcd ef
   //那么abcd被str所读取,空格被ch所读取
   
 那怎么读取一个非空白字符呢?
--方法①
   char str[2];
   scanf("%1s",str);
   char ch = str[0];
  方法②
   char ch;
   scanf(" %c",&ch);//格式控制符%c前加空格,表示强制扫描前导空白,那么ch就能读取到非空白字符了

%s读取字符,遇到空白结束,那么如果我想读入的字符串包括space字符呢?该如何读入
--gets()读取字符串,不会扫描前导空白,遇到enter键结束,且丢弃enter键(即enter键不会遗留在缓冲区中)
  gets同样存在与%s一样的问题,如果输入的字符串超过数组的长度-1,那么就会 瞪一声,然后运行结束
  
用fgets就不会出现这样的问题了
--fgets(char *str,size_t size,stdin)   size = sizeof(str);
如果输入的字符串长度超过size-1就只会读取size-1个字符,如果不超过就正常读取
同样的,fgets也不会扫描前导空白

--getchar()
从缓冲区接收一个字符,通常用来清除缓冲区
要注意的是getchar()的返回值是int型而不是char型


C++输入函数 cin、cin.get()、cin.getline()
--cin不管是输入字符还是字符串,都会扫描前导空白。输入字符串时,遇到空格结束
    char ch;
    char str[10];
    cin>>ch>>str;
    cout<<ch<<"  "<<str;
    //输入      空格空格c空格abcd
    //输出     c  abcd

--cin.get()
//函数有重载
cin.get(char *name,int ArSzie)接收一个字符串,不扫描前导空白,遇到enter键结束,不会对enter进行处理
②cin.get(void)//接收一个字符,不扫描前导空白
③cin.get(char)//接收一个字符,不扫描前导空白

     char ch;
    char str[10];
     cin.get(str,sizeof(str));
     ch = cin.get();//与cin.get(ch);一样   因为上面没丢弃回车,所以回车被ch接收
    cout<<(int)ch<<str;
//输入 空格abcd【enter】
//输出 空格abcd10

--cin.getline(char *str,size_t size)不扫描前导空白,遇到erter键结束,会丢弃enter键

    char ch;
    char str[10];
    cin.get(str,sizeof(str));
    cin.get(ch);
    cout<<str<<ch;
    //输入abcd【enter】e
    //输出abcde//回车被cin.getline()所丢弃


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值