Hekyのblog

cin和getline区别

cingetline 都是 C++ 中用于从标准输入读取数据的方式,但它们之间有一些关键的区别,主要在于它们处理输入的方式不同。下面详细说明它们的差异:

1. 读取方式

2. 分隔符的处理

3. 空白字符的处理

4. 处理换行符的区别

示例代码解释 cingetline 的区别:

#include <iostream>
#include <string>
using namespace std;

int main() {
    int n;
    string s;

    // 使用cin读取一个整数
    cin >> n;  // 读取一个整数,假设输入是5,缓冲区中会留下换行符

    // 使用getline读取字符串
    getline(cin, s);  // 由于cin >> n没有消耗掉换行符,getline会直接读取这个换行符,导致s是空字符串

    cout << "n: " << n << endl;
    cout << "s: " << s << endl;

    return 0;
}

输出:

输入:
5
hello world

输出:
n: 5
s:

解释:

当使用 cin >> n; 读取整数时,输入缓冲区中会残留一个换行符 \n。随后调用 getline(cin, s) 会读取到这个换行符,因此字符串 s 将是一个空字符串。

如何解决这个问题:

在使用 getline 之前,可以先使用 cin.ignore() 来清除输入缓冲区中的换行符。

cin >> n;
cin.ignore();  // 清除缓冲区中的换行符
getline(cin, s);

总结:

因此,根据不同的需求选择 cin 还是 getline

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »