首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何清除cin阅读的内容

如何清除cin阅读的内容
EN

Stack Overflow用户
提问于 2015-03-03 15:22:18
回答 3查看 240关注 0票数 0

输入整数并按ENTER键后,换行符将被存储。

因此,当我执行char c = cin.get()时,前面输入的换行符将被分配给变量c.The下面的循环,因此跳过了这个循环。

.How清除cin的内容?或者如何避免阅读换行符?

节目:

代码语言:javascript
运行
复制
char s;
int T;
cin >> T; // pressing ENTER here.
while(T--)
{
  s = cin.get(); // storing the previously pressed ENTER.('\n')
  while(s != '\n') // does not execute.
  {
   .
   .
   .
   .
   .
   .
  }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-03 15:24:36

代码语言:javascript
运行
复制
std::cin.ignore();

忽略一个角色。

代码语言:javascript
运行
复制
std::cin.ignore(n);

忽略n字符。

代码语言:javascript
运行
复制
std::cin.ignore(std::numeric_limits<std::streamsize>::max());

忽略所有字符。

或者,添加第二个参数来定义分隔字符。缺省值为EOF。

票数 2
EN

Stack Overflow用户

发布于 2015-03-03 15:34:08

你有几个选择。

您只需调用cin.getline(),它将检索行的其余部分,包括换行符,并在下一行的开头保留指针。只要您知道输入行的其余部分是可忽略的,就可以工作。

如果您知道下一行是换行符,也可以使用cin.ignore(1)cin.ignore(2)。对于生成CR+LF的输入流,而不是仅生成一个输入流,您必须忽略两个字符,这取决于您是否获得CR或CR+LF。

另一种选择是使用cin.peek()预先检查下一个字符是什么。这样,您就可以使用跳过换行符而不用使用非换行符。例如:

代码语言:javascript
运行
复制
void skipNewlines (istream &in) {
    int ch;
    while ((ch = in.peek()) == '\r' || ch == '\n')
       in.ignore();
    // and now newlines skipped and next in.get() will read the next char.
}

您可以修改它以跳过所有空白。在使用cin >> T时,该选项可能运行得最流畅。

您还可以考虑编写自己的字符输入函数,该函数读取下一个字符,但忽略换行符(或其他什么)。例如:

代码语言:javascript
运行
复制
int getWithoutNewline (istream &in) {
    int ch;
    do {
        ch = in.get();
    } while (ch == '\n' || ch == '\r');
    return ch;
}

然后在解析整数时使用getWithoutNewline(cin)而不是cin.get()来读取字符。您有灵活性;例如,可以将换行符转换为空格。这样做的好处是你无需知道任何关于断线位置或形式的信息就可以操作。然而,它可能并不适用于所有情况。

就我个人而言,我不会采取盲目丢弃所有内容的方法。我甚至不确定这是否可靠,因为在每一行之后都没有文件结尾。与您所要求的最接近的是,只要调用getline()来读取和使用行的其余部分(包括换行符)。

选择其中之一,或其中之一的某个变体,最适合您的应用程序和使用。

票数 1
EN

Stack Overflow用户

发布于 2015-03-03 15:32:00

“天顶”的答案是正确的。除此之外,还可以看看std::cin.peek()

下面是一些代码:

代码语言:javascript
运行
复制
char s;
int T;
cin >> T; // pressing ENTER here.
while(T--)
{
  while(std::isspace(cin.peek())) // peek used here
    cin.ignore(); // ignore spaces, tabs and enter
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28835465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档