【问题标题】:What does cin.get() do with no arguments?没有参数的 cin.get() 做什么?
【发布时间】:2021-01-12 09:47:50
【问题描述】:

cin.get() 在不传递任何参数时会做什么?

如果没有第二次 cin.get 调用(第 13 行),我的代码将无法工作:

#include <iostream>
#include <conio.h>
#include <cstring>
#include <cstdlib>
#include <string>
using namespace std;

int main() {
    char s[3][10];
    for (int i=0; i <= 2; i++)
    {
        cin.get(s[i], 9);
        cin.get();
    }
    cout << s[1];
    getch();
}

【问题讨论】:

  • 参见,例如,here
  • 对于未来的问题:'doesn't work' 通常过于不精确,无法帮助您摆脱困境。您应该向我们提供测试输入和预期输出(如果提供minimal reproducible example,我们将自己获得实际输出,所以这是可选的)。
  • 假设您输入了012345678901234567890123456789,那么您应该将012345678 读入第一个子数组,然后跳过9(您没有捕获返回值)并从下一个零重新开始,所以输出将是来自第二个子数组的012345678

标签: c++ string cin


【解决方案1】:

函数 cin.get() 从 istream cin 中读取一个字符。您可以考虑一些情况。

案例1.没有cin.get()

 for(int i=0;i<=2;i++)
    {
       cin.get(s[i],9);
    }

如果您在一行中键入所有三个字符串s[0]s[1]s[2],而没有换行中断,这将起作用。

123456789123456789123456789

这将导致s[0] = s[1] = s[2] = "123456789"

案例 2.cin.get()

代码将再读取一个字符,以读取换行符'\n'。但如果输入超过 9 个字符但少于 27 个字符(案例 1),它可能会失败。 cin.get() 将读取一个额外的字符并将'\n' 留在下一个s[i] 中导致cin 错误。

案例3.建议方法

for(int i=0;i<=2;i++)
   {
       cin.get(s[i],9);
       cin.ignore(65536,'\n');
   }

您可以忽略'\n' 之前的所有字符,而不是读取一个额外的字符。这是为上述情况保存的。

【讨论】:

    猜你喜欢
    • 2014-05-23
    • 2018-11-05
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 2014-06-25
    相关资源
    最近更新 更多