cin
>>
运算符
cin
默认情况下会跳过空格、制表符和换行符等空白字符,以便从输入中提取非空白字符。
#include <iostream>
using namespace std;
int main() {
char x;
if (cin >> x) {
cout << "Input successful. x = " << x << endl;
}
else {
if (cin.eof()) {
cout << "End of input reached." << endl;
}
else {
cout << "Input failed for some other reason." << endl;
}
}
}
// 64 位输出请用 printf("%lld")
输入:
空格换行1
输出:
Input successful. x = 1
输入:
换行空格c1
输出:
Input successful. x = c
类型不匹配时
a.类型无法强转:cin>>x返回值为false,cin.eof()返回值为false.
#include <iostream>
using namespace std;
int main() {
int x;
if (cin >> x) {
cout << "Input successful. x = " << x << endl;
}
else {
if (cin.eof()) {
cout << "End of input reached." << endl;
}
else {
cout << "Input failed for some other reason." << endl;
}
}
}
// 64 位输出请用 printf("%lld")
输入:
c1
输出:
Input failed for some other reason.
b.类型可以强转
输入:
1.56
输出:
Input successful. x = 1
超出范围最大值时,cin>>x值为false,cin.eof()值为false
输入:
2147483648
输出:
Input failed for some other reason.
在输入时,Ctrl+C
和 Ctrl+Z
的功能:
-
Ctrl+C:在Windows系统中,
Ctrl+C
通常用于中断正在运行的程序或终止当前任务。当你按下Ctrl+C
键时,它会发送中断信号给正在运行的程序,以终止它的执行。这通常是用于停止程序的主要方法。 -
Ctrl+Z:在Windows系统中,当你执行
cin >> x
并在输入中按下Ctrl+Z
键时,这通常表示输入的结束(End of File,EOF)。在这种情况下,cin
会认为没有更多的输入可用,因此它将停止等待输入并将状态设置为 EOF。同时cin
会将x
的值保持不变,不会将任何值存储在x
中。你可以检查cin
的状态来确定输入是否成功完成。cin>>x值为false,cin.eof()值为true
输入:
^Z
输出:
End of input reached.
get
函数
签名为:istream& get(char& c)
当使用 cin.get
函数时,你可以用来从标准输入流中读取单个字符(包括空格、制表符、换行符),并将它存储在字符变量 c
中。下面是一个简单的示例:
#include <iostream>
int main() {
char ch;
std::cout << "请输入一个字符: ";
std::cin.get(ch); // 从输入中读取一个字符并存储到变量 ch 中
if (std::cin) {
std::cout << "你输入的字符是: " << ch << "-----"<<std::endl;
}
else {
std::cout << "无效的输入。" << std::endl;
if (std::cin.eof())
std::cout << "cin状态为eof" << std::endl;
}
return 0;
}
输入:
空格1
输出:
你输入的字符是: 空格-----
输入:
换行
输出:
你输入的字符是:换行-----
输入:
^Z
输出:
无效的输入。
cin状态为eof
getline
函数
签名为:istream& getline(istream& is, string& str, char delim);
这个函数用于从输入流 is
(通常是 cin
或其他输入流对象)中读取一行文本,并将结果存储在字符串 str
中。delim
参数是可选的,它指定了行的终止字符,通常是换行字符 ('\n')。以下是一个演示如何使用 getline
函数的示例:
#include <iostream>
#include <string>
int main() {
std::string line;
std::cout << "请输入一行文本: ";
if (getline(std::cin, line)) {
std::cout << "你输入的行是: " << line << std::endl;
}
else {
if (std::cin.eof()) {
std::cout << "输入结束。" << std::endl;
}
else {
std::cout << "发生错误或输入失败。" << std::endl;
}
}
return 0;
}
输入:
空格空格Tabfdf1
输出:
你输入的行是:
空格空格制表符fdf1
getline
函数会跳过换行字符 ('\n'),所以,如果你输入了一个空行(只按下 Enter 键),str将保存一个空字符串,而不包含回车字符。因此,str 的长度将为0。
#include <iostream>
#include <string>
int main() {
std::string line;
std::cout << "请输入一行文本: ";
if (getline(std::cin, line)) {
std::cout << "你输入的行是: " << line << std::endl;
std::cout << "line[0]的ascii值为:" << (int)line[0] << std::endl;
std::cout << "长度为: " << line.length() << std::endl;
}
else {
if (std::cin.eof()) {
std::cout << "输入结束。" << std::endl;
}
else {
std::cout << "发生错误或输入失败。" << std::endl;
}
}
return 0;
}
输入:
换行
输出:
你输入的行是:
line[0]的ascii值为:0
长度为: 0
输入ctrl+z时要单独一行,否则乱码
输入:
1^Z换行换行
输出:
你输入的行是: 1⸮
line[1]的ascii值为:26
长度为: 2输入:
^Z
输出:
输入结束。