std:: getline
| 
           定义于头文件
            
            
             <string>
            
            | ||
| 
           
            
             template
            
            
             <
            
            
             class
            
            CharT,
            
             class
            
            Traits,
            
             class
            
            Allocator
            
             >
            
             
             
              
               std::
               
                basic_istream
               
              
             
             
              <
             
             CharT, Traits
             
              >
             
             
              &
             
              | (1) | |
| 
           
            
             template
            
            
             <
            
            
             class
            
            CharT,
            
             class
            
            Traits,
            
             class
            
            Allocator
            
             >
            
             
             
              
               std::
               
                basic_istream
               
              
             
             
              <
             
             CharT, Traits
             
              >
             
             
              &
             
              | (2) | (C++11 起) | 
| 
           
            
             template
            
            
             <
            
            
             class
            
            CharT,
            
             class
            
            Traits,
            
             class
            
            Allocator
            
             >
            
             
             
              
               std::
               
                basic_istream
               
              
             
             
              <
             
             CharT, Traits
             
              >
             
             
              &
             
              | (3) | |
| 
           
            
             template
            
            
             <
            
            
             class
            
            CharT,
            
             class
            
            Traits,
            
             class
            
            Allocator
            
             >
            
             
             
              
               std::
               
                basic_istream
               
              
             
             
              <
             
             CharT, Traits
             
              >
             
             
              &
             
              | (4) | (C++11 起) | 
       
        getline
       
       从输入流中读取字符并将其存入字符串:
      
| 目录 | 
参数
| input | - | 获取数据的流 | 
| str | - | 存放数据的字符串 | 
| delim | - | 分隔符字符 | 
返回值
input
注释
       当读取以空白分隔的输入时(例如
       
        
         
          int
         
         n
         
          ;
         
         
          
           std::
           
            cin
           
          
         
         
          >>
         
         n
         
          ;
         
        
       
       ),后续的所有空白字符(包括换行符)都会保留在输入流中。当切换到面向行的输入时,使用
       
        getline
       
       获取的第一行内容将仅为这些空白字符。若此行为不符合预期,可能的解决方案包括:
      
- 
        对
        getline进行显式的多余初始调用。
- 使用 std:: cin >> std:: ws 移除连续空白符。
- 使用 cin. ignore ( std:: numeric_limits < std:: streamsize > :: max ( ) , ' \n ' ) ; 忽略输入行中所有剩余字符。
示例
        以下示例演示了如何使用
        
         getline
        
        函数读取用户输入,并通过
        
         
          delim
         
        
        参数逐行处理流或按行部分处理。
       
#include <iostream> #include <sstream> #include <string> int main() { // 问候用户 std::string name; std::cout << "What is your name? "; std::getline(std::cin, name); std::cout << "Hello " << name << ", nice to meet you.\n"; // 逐行读取文件 std::istringstream input; input.str("1\n2\n3\n4\n5\n6\n7\n"); int sum = 0; for (std::string line; std::getline(input, line);) sum += std::stoi(line); std::cout << "\nThe sum is " << sum << ".\n\n"; // 使用分隔符读取行部分 std::istringstream input2; input2.str("a;b;c;d"); for (std::string line; std::getline(input2, line, ';');) std::cout << line << '\n'; }
可能的输出:
What is your name? John Q. Public Hello John Q. Public, nice to meet you. The sum is 28. a b c d
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用标准 | 发布时行为 | 正确行为 | 
|---|---|---|---|
| LWG 91 | C++98 | 
          getline
         未表现为无格式输入函数 | 表现为无格式输入函数 | 
参见
| 提取字符直至找到指定字符 ( 
           std::basic_istream<CharT,Traits>
          的公开成员函数) |