gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 15:07:23 26 4
gpt4 key购买 nike

我有这两个代码:

char a[256];
cin>>a;
cout<<a;

char a[256];
cin.get(a,256);cin.get();
cout<<a;

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

char a[256];
cin.get(a,256);
cout<<a;

我的问题是(第一个):对于字符数组,我应该使用什么? 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;

正确的是:

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

所以,这是怎么回事?请有人为每种情况解释!谢谢。

最佳答案

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

第一个 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

字符串会增长以容纳任意数量的输入。

关于c++ - char 数组的 cin 和 cin.get() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29630513/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com