个性化阅读
专注于IT技术分析

输入中有空行时,如何在C++中使用getline()?

在C++中, 如果我们需要从流中读取少量句子, 则通常首选的方法是使用getline()函数。它可以读取直到遇到换行符或看到用户提供的定界符。

这是一个使用C++的示例程序, 该程序读取四个句子并在最后显示”:newline”

//A simple C++ program to show working of getline
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
     string str;
     int t = 4;
     while (t--)
     {
         //Read a line from standard input in str
         getline(cin, str);
         cout <<str <<" : newline" <<endl;
     }
     return 0;
}

样本输入:

This
 is
 Geeks
 for

如预期的输出是:

This : newline
is  : newline
Geeks : newline
for : newline

上面的输入和输出看起来不错, 当输入之间有空白行时可能会出现问题。

样本输入:

This

is 

Geeks

for

输出如下:

This : newline
 : newline
is  : newline
 : newline

它不会打印最后两行。原因是即使未读取任何字符, getline()也会读取直到遇到enter。因此, 即使第三行没有任何内容, getline()也会将其视为单行。进一步观察第二行中的问题。

可以修改代码以排除此类空白行。

修改后的代码:

//A simple C++ program that uses getline to read
//input with blank lines
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
     string str;
     int t = 4;
     while (t--)
     {
         getline(cin, str);
  
         //Keep reading a new line while there is
         //a blank line
         while (str.length()==0 )
             getline(cin, str);
  
         cout <<str <<" : newline" <<endl;
     }
     return 0;
}

输入如下:

This

is 

Geeks

for

输出如下:

This : newline
is  : newline
Geeks : newline
for : newline

本文作者:沙林·南达(Sarin Nanda)。如果你喜欢srcmini并希望做出贡献, 那么你也可以写一篇文章并将你的文章邮寄到contribution@srcmini.org。查看你的文章出现在srcmini主页上, 并帮助其他Geeks。

赞(0) 打赏
未经允许不得转载:srcmini » 输入中有空行时,如何在C++中使用getline()?
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

微信扫一扫打赏