没有参数的 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() 做啥?的主要内容,如果未能解决你的问题,请参考以下文章