你了解多少种 C++ 输入方法?
出是非常基础的操作,其中 cin
、cin.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
总结
不同的输入方法有不同的适用场景和特点。了解这些细微的差别有助于在编程时选择合适的输入方式,以满足不同的需求。希望这篇文章能帮助大家更好地理解和应用 cin
、cin.get()
、getchar()
、getline()
和 cin.getline()
。