cin.get()和cin.getline()实现一行字符串(可能包含空格)cin>>遇到空格就停止输入

我们知道cin >> 输入通过空白(空格、制表符、换行符)判断输入终点,所以在输入一行有空格的字符串时,会输入失败。

#include<iostream>
using namespace std;
int main()
{
    freopen("1.txt","r",stdin);
    freopen("2.txt","w",stdout);
    char cin_array[100];
    char getline_array[100];
    char get_array[100];

    cin >> cin_array;
    cout << cin_array << endl;

    cin.getline(getline_array,8);
    cout << getline_array << endl;

    cin.get(get_array,8);
    cout << get_array << endl;
}

输入:

dgh tql
dgh tql
dgh tql

输出:

dgh
 tql
dgh tql

我们来解释一下为什么会有这样的输出结果。
1、cin>>遇到空格停止,所以cin_array中只有dgh,并且将 tql留在了缓存区中。
2、cin.getline()开始输入,但是并没有输入第二行的dgh tql,而是将缓存区中的 tql输入,遇到结尾的换行符停止输入。
3、cin.get()函数开始读入第二行的dgh tql,完整输入并遇到末尾换行符停止读入,输出完整字符串。

cin.getline(array,size)函数

该函数读取整行,以换行符为标识停止读入。array为数组名,size为读入个数。如果size = n,则最多读入n - 1个字符,最后一个字符用于将读入的换行符转为空字符\0储存。
注意:size可以比输入字符串的字符数大,不影响结果,但是不能比其小
该函数读入换行符,但是会将其转换为空字符\0储存。一直相反,cin.get()函数也是以换行符结束输入,但是它会不再读取并抛弃换行符,将其留在缓存区中,这将造成不必要的麻烦。后文会介绍如何解决此类问题。

cin.get(array,name)函数

该函数也是读取整行,以换行符为标识停止读入。array为数组名,size为读入个数。如果size = n,则最多读入n - 1个字符,最后一个字符用于储存空字符\0
为解决cin.get()会将换行符留在缓存区的问题,可以再调用一次。

cin.get(get_array,100);
    cout << get_array << endl;
    cin.get();

将换行符处理掉,或者还可以采用这样的格式:

cin.get(get_array,100).get();
    cout << get_array << endl;

处理掉句尾的换行符。
虽然cin.getline()函数不存在这样的麻烦,但是它也支持相似的语法。

cin.getline(getline_array,100).getline(get_array,100);
    cout << getline_array << endl;
    cout << get_array << endl;

表示连续地输入两行

发布了267 篇原创文章 · 获赞 38 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/dghcs18/article/details/104043853
今日推荐