关于getline函数的语法
`getline`函数在 C++中用于从输入流中读取一行字符串,直到遇到换行符(`\n`)为止。它将读取的内容(不包括换行符)存储到指定的字符串变量中。`getline`函数有两种常见的形式:
1.从 std::istream
读取一行到 std::string
:
std::istream& getline(std::istream& is, std::string& str);
is
:输入流的引用,可以是std::cin
或其他输入流对象。str
:字符串变量的引用,用于存储读取的行。
2.从 std::istream
读取一行到 std::string
,并指定分隔符:
std::istream& getline(std::istream& is, std::string& str, char delim);
is
:输入流的引用。str
:字符串变量的引用。delim
:分隔符字符,getline
会读取直到遇到这个字符为止的内容。
第一种情形式的实例用法如下:
#include <iostream>
#include <string>
int main() {
std::string line;
std::cout << "请输入一些文本,按回车结束:" << std::endl;
// 读取一行
std::getline(std::cin, line);
std::cout << "你输入的是:" << line << std::endl;
return 0;
}
在这个例子中,std::getline
从标准输入流 std::cin
读取一行文本,并将其存储在字符串变量 line
中。然后程序输出用户输入的文本。如果用户输入后按下回车键,getline
会停止读取,并留下换行符在输入流中,这可能会影响后续的输入操作。因此,通常在使用 getline
后,需要额外的逻辑来处理或消耗掉输入流中的换行符。
第二种情形式的实例用法如下:
#include <iostream>
#include <string>
int main() {
std::string line;
std::cout << "请输入一些以逗号分隔的文本,按回车结束:" << std::endl;
// 读取一行,以逗号为分隔符
std::getline(std::cin, line, ',');
std::cout << "你输入的是:" << line << std::endl;
return 0;
}
假设用户输入:apple,banana,orange
程序输出: 你输入的是:apple
由于我们指定了逗号作为分隔符,std::getline
在遇到第一个逗号时停止读取,并将 "apple" 存储在 line
中。注意:剩余的输入("banana,orange\n")仍然留在输入流中,可以在后续的读取操作中继续处理。
关于getline函数的返回值
getline
函数的返回值是输入流的引用,这允许它在条件语句中被使用,以检查读取操作是否成功。
示例如下
#include<iostream>
#include<string>
using namespace std;
int main() {
string str;
cout << "请输入一串字符串:" << endl;
while (getline(cin, str)) {
cout << str << endl;
}
return 0;
}
while
循环会检查 getline
函数的返回值。如果 getline
成功读取了一行数据,它返回 true
,循环继续执行;如果读取失败(比如到达了输入流的末尾),它返回 false
,循环结束。
因此,while (getline(cin, str))
这个循环会一直执行,直到没有更多的输入或者遇到EOF。在您提供的代码中,这意味着程序会不断地读取用户输入的每一行字符串,并将其打印出来,直到用户输入EOF(在Windows中通常是Ctrl+Z,然后按Enter;在Unix/Linux/Mac OS中是Ctrl+D)。ps:EOF信号(如在命令行中使用Ctrl+D或Ctrl+Z),getline
会返回一个失败的流,循环结束。
本质:当 getline
成功读取一行数据时,它会返回输入流对象,而在C++中,非空的流对象被视为真值(true
)。如果 getline
遇到文件结束符(EOF)或者发生输入错误,它会设置输入流的失败状态,这时流对象被视为假值(false
)。
所以,在 while (getline(cin, str))
这样的循环中,getline
的返回值被用作循环的继续条件:
- 如果
getline
成功读取一行,返回cin
,循环继续执行。 - 如果
getline
遇到EOF或输入错误,返回一个处于失败状态的cin
,循环终止。