【问题标题】:C++ multiple cin.get()C++ 多个 cin.get()
【发布时间】:2014-03-10 02:16:48
【问题描述】:

这似乎是一个老问题,但这里的问题不是使用两个 cin.get(),而是两个以上!如果我写(在 DEV C++ 中)
我只收到一个输入请求,然后结束程序。现在,我预计至少有两个 cin 请求,因为我预计:

char s[50];
char t[100];

char r[100];

char f[100];

cin.get(s,49);    
cin.get(t,99);
cin.get(r,99);
cin.get(f,99);

我加快了至少 2 个输入请求,因为:

first cin: buffer empty,I insert the string s and \n
second cin: I have in buffer \n still, then t=\n without input request
third cin: buffer empty, I insert the string r and \n
fourth cin: I have in buffer \n still, then f=\n without input request

但我只有 s 字符串的输入请求! 为什么我只有一个输入请求?缓冲区没有用第二个 cin.get 清理,让第三个 cin.get 正常工作?谢谢

【问题讨论】:

    标签: c++ string input iostream cin


    【解决方案1】:

    t 不等于 '\n'。它是空的。 .get(char*,int)永远从缓冲区中删除 '\n'

    更糟糕的是,尝试读取t 会将cin 设置为失败状态,因为无法读取任何内容,这将导致从cin 的所有后续读取任何类型失败立即尝试,直到您 .clear() 处于失败状态。

    这是令人惊讶的行为,但根据问题中的最后一句话,您似乎已经猜到了大部分,所以,干得好!你正在学习!

    http://en.cppreference.com/w/cpp/io/basic_istream/get

    【讨论】:

    • 我还是想不通。看起来很简单,但是我找不到这个问题的任何答案!
    猜你喜欢
    • 2011-10-24
    • 1970-01-01
    • 2021-11-22
    • 2012-11-01
    • 1970-01-01
    • 2016-03-10
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    相关资源
    最近更新 更多