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)
字符串将增长以适应任何数量的输入.