关于Scanf和gets函数的讨论

gets()函数用来从标准输入设备(键盘)读取字符串直到回车结束, 但回车符不属于这个字符串。其调用格式为:
     gets(s);
     其中s为字符串变量(字符串数组名或字符串指针)。
     gets(s)函数与scanf("%s", &s)相似, 但不完全相同, 使用scanf("%s", &s)函数输入字符串时存在一个问题, 就是如果输入了空格会认
为输入字符串结束,空格后的字符将作为下一个输入项处理, 但gets() 函数将接收输入的整个字符串直到回车为止。

   char string[15];

   gets(string);        /*遇到回车认为输入结束*/
  
   scanf("%s",string);   /*遇到空格认为输入结束*/

     所以在输入的字符串中包含空格时,应该使用gets输入。

     注意:实际使用scanf()函数时存在一个问题.
1.举例说明:
     当使用多个scanf()函数连续给多个字符变量输入时, 例如:
      main()
      {
           char c1, c2;
           scanf("%c", &c1);
           scanf("%c", &c2);
           printf("c1 is %c, c2 is %c", c1, c2);
      }

2.运行结果:
//
h                      //输入h,然后回车
c1 is h, c2 is

Press ENTER to continue.

hi                     //输入hi,然后回车
c1 is h, c2 is i
Press ENTER to continue.

3.结果分析:
     运行该程序, 输入一个字符h后回车 (要完成输入必须回车), 在执行scanf("%c", &c1)时, 给变量c1赋值"h", 但回车符仍然留在缓冲区
内, 执行输入语句scanf("%c", &c2)时, 变量c2输出的是一空行(c2的值为回车字符分ASCII码——0x0a), 如果输入hi后回车, 那么输出结果
为:c1 is h, c2 is i。

4.解决方法:
     要解决以上问题, 可以在输入函数前加入清除函数fflush()。修改以上程序变成:
      #include<stdio.h>
      main()
      {
           char c1, c2;
           scanf("%c", &c1);
           fflush(stdin);    //清除输入缓冲区(清除掉第一次的回车)
           scanf("%c", &c2);
    fflush(stdin);    //清除输入缓冲区(清除掉第二次的回车)
           printf("c1 is %c, c2 is %c", c1, c2);
      }
/
      运行:
r //输入r,然后回车
t //输入t,然后回车
c1 is r, c2 is t
Press ENTER to continue.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值