scanf函数与gets函数关于字符串输入换行符问题

先看下代码以及运行结果(这代码从网上拷的)

#include <stdio.h>

int main()
{
    // 先读入一个整数,再读入2个串
    int a;
    char b1[100];
    char b2[100];

    scanf("%d", &a);
    gets(b1);
    gets(b2);

    printf("a = %d\n", a);
    printf("b1 = %s\n", b1);
    printf("b2 = %s\n", b2);

    return 0;
}

这是使用gets函数的运行结果:

改成scanf函数试试

   scanf("%d", &a);
   scanf("%s",b1);
   scanf("%s",b2);

从两个运行结果来看,gets函数会读取换行符,但是读取了换行符了就不会读取后面的数据;记住,当我们输入回车键的时候其实是输入了换行回车两个字符进去的,记住是先输入回车字符后输入换行字符,但是gets函数并不接受回车字符,把它当作结束符,即遇到回车就读取之前的数据,那么后面的换行符并没有读取,这就导致后面使用的gets函数会读取到换行符,读取到了换行符就不会读取后面的字符,且把它转换为终止符。scanf函数就不会出现这种情况。

也就是说使用gets函数得注意输入换行符的问题,一般使用getchar接受换行符,有许多人可能为问到既然scanf不会出现这种问题为什么不使用scanf函数,这里有两个原因:

1使用gets函数更加简单对于字符串输入来说;

2scanf不能接受空格,sanf把空格当成结束符,一般遇到有空格的字符串得使用gets函数接受读取,gets函数可以接收有空格的字符串。

总而言之,使用C语言里的gets得注意换行符的接收,scanf函数不能接收带空格的字符串。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值