C++ getline()用法和参数

getline() 的常用形式:

istream& getline(istream& is, string& str, char delim = '\n');

参数说明:

  1. istream& is: 输入流,例如 cin、ifstream 等。表示数据的来源。
  2. string& str: 用于存储读取到的字符串内容。
  3. char delim = '\n': 可选参数,指定行的分隔符,默认为换行符 \n。也就是说,默认情况下 getline() 会读取到换行符为止,但不包括换行符本身。

返回值:

  • 返回输入流的引用,允许链式调用。
  • 如果到达了输入的末尾(如 EOF),返回的流会变为无效状态,可用 is.eof() 或 is.fail() 检测。


getline() 的使用:

以下是结合你的代码的详细解释:

1. 在你的代码中:

getline(cin, line);

  • 这里的 getline(cin, line) 从标准输入 cin 中读取一整行文本,直到遇到换行符 \n。
  • line 是存储输入内容的 string 对象。


2. 为什么需要调用 getline() 两次?
  • 第一调用:
  1. line);
    • 这是为了消费掉前一行输入的换行符 \n(也就是 cin >> cnt 输入完后剩下的换行符)。
    • 如果不这样,后续的 getline() 会读取到一个空行,导致逻辑错误。
  • 第二调用(在循环中):
  1. line);
    • 在循环中,getline() 每次会读取一行完整的输入数据。


3. getline() 和分隔符的理解:
  • 默认情况下,getline() 使用换行符 \n 作为分隔符,读取输入时不包含换行符本身。
  • 例如:
  1. input = "Hello World\nC++ Programming";
    getline(cin, input);
  •  "Hello World" 并按回车,input 的值会是 "Hello World",不会包含 \n。
  • 如果需要自定义分隔符,可以传递第三个参数。例如,读取到逗号为止:
  1. part;
    input = "apple,banana,grape";
    stream ss(input);
    while (getline(ss, part, ',')) {
        cout << part << endl;
    }

  1. banana
    grape


总结:

  • getline() 用于按行读取输入,可以避免逐字符或逐单词读取的麻烦。
  • 在需要连续输入不同格式数据(如你的代码中 cin >> cnt 后读取一行字符串)时,调用一次空的 getline() 是常见的处理方式,用于跳过换行符。
  • 默认分隔符是 \n,但可以自定义。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值