string 与 getline()使用细节

先看下string在标准输入的读取过程

string对象会自动忽略开头的空白 (既空格符,换行符,制表符等)并从一个真正的字符开始读起,直到遇见下个空白符为止(所以这个空白符(可能是空格,也可能是换行符等等)是不会被读取的,所以它还会保存在标准输入流中),所以string会忽略空白符,并且读取到真正字符后,一遇到空白符就结束读取。

getline()函数概念

getline()函数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符位置,(注意换行符也被读进来了,但并把换行符存到string对象中) 这样就可能导致getline() 在前面有输入的情况下读入缓冲区遗留的回车导致读入string是空的

举个例子

#include<bits/stdc++.h>
using namespace std;

int main(){
    string s1,s2;
    cin >> s1;//读入第一个string
    for(int i = 0;i < 2;i++){//再读入两行
        getline(cin,s2);
        if(s2.empty())//如果空串输出提示
            cout << "empty" << endl;
        cout << s2 << endl;
    }
    system("pause");
    return 0;
}


所以在读入指定行时,要注意使用getline()时要把缓冲区的回车清空,比如用getchar(),防止读入空string影响程序运行结果

#include<bits/stdc++.h>
using namespace std;

int main(){
    string s1,s2;
    cin >> s1;//读入第一个string
    for(int i = 0;i < 2;i++){//再读入两行
        getline(cin,s2);
        if(!s2.empty())
            cout << s2 << endl;
        else i--;
    }
    system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值