当没有传递任何参数时,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();
}
发布于 2021-01-12 11:57:04
函数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'
之前的所有字符,而不是读取一个额外的字符。这是为上述情况而保留的。
https://stackoverflow.com/questions/65681429
复制