区分getchar()等函数

前言:

因为 C++ 兼容 C 的头文件,而两者又各自有着自己关于标准输入的内容,并且这些用法都比较常用,大家也都是根据自己的习惯自己选择。这些函数本身就容易混淆,还不能置之不理,所以总结几个常用的。

  1. scanf() 和 cin >>:

    首先这应该是 C 和 C++ 最常用的标准读入写法。其实本身大家都能区分的开,但是有一、两点大家平时可能不太注意。

    首先要知道 cin >> 的用法,其实cin >> 是根据流中的类型自动匹配,而 scanf() 是我们人为的指定类型。显而易见,scanf()的写法从读入的时间上来说是要快一点儿的(毕竟省去了判断类型的过程)。

    其次,cin >> 由于不用提前规定读入类型,那么也就意味着读入任何数据其函数内部处理的内容是一致的。那么重点是这会导致什么呢?我们知道通常读入整数之类的类型时是会自动忽略空白符的,所以说如果想通过cin >> 读入一个字符时也会如此。而 scanf("%c",&c)时会读入空格。这一点平时容易忽略。

  2. getchar() 和 gets():

    二者都是在 <stdio.h> 下的函数,前者是读入单个字符,后者是读入字符串。写法分别为 getchar() 和 gets(char *cs)。需要注意的是 getchar() 返回的结果不是字符,而是其对应的 ASCII 码 即 int getchar()。而 gets() 则不可以读入 string 类型,道理也很简单,就是 string 是 C++ 标准库中的东西,有 gets() 时还没有 string ,并且之后 C++ 标准库的目的也是定义一个新的标准,所以一般也没必要返回头来修改 C 头文件的东西来适应 C++。

  3. getline() 和 cin.getline():

    这两个函数因为名字一样但是很容易混淆,但二者却不是非常相似。前者是定义在 <string> 标准库中,而后者是定义在 <iostream> 中的,这是一点不同。再有从这个小标题就可以看出,前者是 <string> 独立的一个函数,而后者则是输入流的成员函数,这是另一点。

    那么二者用法上有什么区别呢?首先功能上二者都是读取一行数据(因为默认的终止符是’\n’),但是用于接收的变量不一样。前者的常用写法是 getline(输入流对象[例如标准输入流 cin],string 对象),也就是用 string 类型的对象来接收数据;而后者的写法则是cin.getline(char *cs,int 读入的最长个数,终止符 = ‘\n’ ),也就是说后者只能用 char 型数组等来接收。

    总结:

    • 上述函数的终止符都有 ‘\n’、EOF。
    • cin >> 和 getline() 可以读入 string 类型,其余不可以。
    • cin >> 何时都忽略空白符,而 scanf()等函数则在读入的是非 char 的类型是忽略空白符。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Drdajie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值