char数组的cin和cin.get()之间的区别

Rub*_*n P 12 c++ arrays string namespaces cin

我有这两个代码:

char a[256];
cin>>a;
cout<<a;
Run Code Online (Sandbox Code Playgroud)

char a[256];
cin.get(a,256);cin.get();
cout<<a;
Run Code Online (Sandbox Code Playgroud)

也许,相对于没有cin.get()的第二个;

char a[256];
cin.get(a,256);
cout<<a;
Run Code Online (Sandbox Code Playgroud)

我的问题是(第一个):对于char数组,我应该使用什么?cin还是cin.get()?为什么我要使用cin.get(); 我的char初始化后没有参数?

我的第二个问题是:我的c ++老师教我每次使用cin.get()进行初始化字符和每个初始化char数组或int数组或者只是int或者其他什么,再次使用cin.get(); 在它之后.这就是我最初想问的问题.

所以,现在我得到了这两个:在这种情况下,在整数初始化之后没有cin.get(),我的程序将会中断,我不能再做我的char初始化了.

int n;
cin>>n;
char a[256];
cin.get(a,256); cin.get();  // with or without cin.get();?
cout<<a;
Run Code Online (Sandbox Code Playgroud)

而正确的一个:

int n;
cin>>n; cin.get();
char a[256];
cin.get(a,256); cin.get(); // again, with or without?
cout<<a;
Run Code Online (Sandbox Code Playgroud)

那么,怎么回事?请有人为每个案例解释一下!谢谢.

Mik*_*our 10

他们做不同的事情,所以选择你想要的东西,或者下面给出的更好的选择.

第一个cin>>a;读取单个单词,跳过任何前导空格字符,并在遇到空格字符(包括行尾)时停止.

第二行cin.get(a,256);cin.get();读取整行,然后使用行尾字符,以便重复此操作将读取下一行.cin.getline(a,256)这是一个稍微简洁的方法.

第三行cin.get(a,256)读取整行,但在流中留下行尾字符,因此重复此操作将不再提供输入.

在每种情况下,如果输入的字/行比固定大小的缓冲区长,你会得到某种不良行为.因此,您通常应该使用更友好的字符串类型:

std::string a;
std::cin >> a;              // single word
std::getline(std::cin, a);  // whole line
Run Code Online (Sandbox Code Playgroud)

字符串将增长以适应任何数量的输入.