没有参数的 cin.get() 做啥?

Posted

技术标签:

【中文标题】没有参数的 cin.get() 做啥?【英文标题】: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 【参考方案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' 之前的所有字符,而不是读取一个额外的字符。这是为上述情况保存的。

【讨论】:

以上是关于没有参数的 cin.get() 做啥?的主要内容,如果未能解决你的问题,请参考以下文章

cin.get

super() 在没有任何参数的情况下做啥?

给定 nil 参数时要做啥的 Objective-c 约定?

bind_param() 中的第一个参数究竟是做啥的?

C标准输入流

进行简单功能性查询的简单代码