【C++】你了解多少种 C++ 输入方法?

你了解多少种 C++ 输入方法?

出是非常基础的操作,其中 cincin.get()getchar()getline()cin.getline() 都是用于读取输入数据的常用方法。理解它们的异同点,对编写高效和正确的代码至关重要。本文将详细解析这些输入方法的用法及其异同点。

1. cin

1.1 基本用法

cin 是 C++ 中标准的输入流,用于从标准输入设备(通常是键盘)读取数据。最常见的用法是 cin >>,它会调用成员函数 operator>>() 进行数据读取。

1.2 行为特点

  • cin >> 从缓冲区中读取数据时,如果缓冲区中的第一个字符是空格、制表符(tab)或换行符等分隔符,cin >> 会将其忽略并清除,继续读取下一个字符。
  • 如果缓冲区为空,则 cin >> 会等待输入。
  • 读取成功后,字符后面的分隔符会残留在缓冲区中,cin >> 不会处理它们。这意味着,如果后续使用 getline(),需要注意处理换行符。

1.3 保留空白字符

如果不希望忽略空白字符,可以使用 noskipws 流控制符。例如:

#include <iostream>
using namespace std;

int main() {
    char n, m, k, p, q;
    cin >> noskipws >> n >> m >> k >> p >> q;
    cout << n << endl;
    cout << m << endl;
    cout << k << endl;
    cout << p << endl;
    cout << q << endl;
    return 0;
}

输入:q w e a z

输出:

q
w
e
a
z

1.4 示例:处理换行符

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

int main() {
    char a;
    cin >> a;
    char b[10];
    cin.getline(b, 10); // 这行语句不成功,因为换行符没有被吃掉
    cout << a << endl;
    cout << b << endl;
    return 0;
}

2. cin.get()

cin.get() 用于读取单个字符。如果希望存储全部字符,需要传入一个数组和长度。

2.1 示例

#include <iostream>
using namespace std;

int main() {
    char a;
    cin >> a; // cin 不吃掉换行符,缓存中仍有换行符
    char b[10];
    cin.getline(b, 10); // 这行语句不成功,因为换行符没有被吃掉
    cout << a << endl;
    cout << b << endl;
    return 0;
}

3. getchar()

getchar() 从标准输入读取下一个字符(包括换行符)。它会将输入的换行符存储到缓冲区中,直接结束读取操作。通过调用 getchar() 可以清除缓冲区中的换行符。

3.1 示例

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

int main() {
    char str1[10], str2[10];
    cin.getline(str1, 10);
    getchar(); // 清除缓冲区中的换行符
    cin.getline(str2, 10);
    cout << str1 << endl;
    cout << str2 << endl;
    return 0;
}

4. cin.getline()

cin.getline() 用于读取一行字符,包括空格,并会清除末尾的换行符。

4.1 示例

#include <iostream>
using namespace std;

int main() {
    char m[20];
    cin.getline(m, 5);
    cout << m << endl;
    return 0;
}

输入:jkljkljkl

输出:

jklj

5. getline()

getline() 用于从输入流中读取一行字符串,直到遇到换行符。需要包含头文件 <string>

5.1 示例

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

int main() {
    string str;
    getline(cin, str);
    cout << str << endl;
    return 0;
}

输入:jkl jfksldfj jklsjfl

输出:

jkl jfksldfj jklsjfl

5.2 示例:多维数组中的应用

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

int main() {
    char m[3][20];
    for (int i = 0; i < 3; i++) {
        cout << "\n请输入第" << i + 1 << "个字符串:" << endl;
        cin.getline(m[i], 20);
    }
    cout << endl;
    for (int j = 0; j < 3; j++) {
        cout << "输出m[" << j << "]的值:" << m[j] << endl;
    }
    return 0;
}

输入:

kskr1
kskr2
kskr3

输出:

输出m[0]的值:kskr1
输出m[1]的值:kskr2
输出m[2]的值:kskr3

总结

不同的输入方法有不同的适用场景和特点。了解这些细微的差别有助于在编程时选择合适的输入方式,以满足不同的需求。希望这篇文章能帮助大家更好地理解和应用 cincin.get()getchar()getline()cin.getline()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SuhyOvO

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

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

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

打赏作者

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

抵扣说明:

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

余额充值