[英]cin.get() function in C++
我一直在研究c ++,并遇到了下面的代码。 我不明白为什么他们必须在“ cin.get(straddress,sizeof(straddress),fdelim).get(c)”中使用get(c)。 没有此get(c)的代码就可以正常工作。 有人可以启发我使用get(c)吗? 该程序的目的是读取混合类型的数据。
const char fdelim = '\t';
char straddress[256];
int zip;
char c;
cout << "Enter a record of data: ";
cin.get(straddress, sizeof(straddress), fdelim).get(c) >> zip;
cout << "\nStreet address : " << straddress << endl;
cout << "\nZip/Postal code: " << zip << endl;
线
cin.get(straddress, sizeof(straddress), fdelim).get(c) >> zip;
将所有内容从fdelim
读取到straddress
,然后将定界符读取到c
,然后将邮政编码读取为zip
。
可以这样写:
cin.get(straddress, sizeof(straddress), fdelim);
cin.get(c);
cin >> zip;
由于未使用c
,因此它也可能被忽略。
cin.get(straddress, sizeof(straddress), fdelim);
cin.ignore(1); // Read and discard 1 character.
cin >> zip;
假设用户在键入\\t
字符之前键入的字符数少于255个,则到达\\t
字符时,对cin.get()
的第一个调用将停止读取,但不会从cin
提取出来。 接下来对cin.get()
调用将提取\\t
。
我会选择使用std::istream::getline()
代替,它读取定界符,但不将其存储在调用者的缓冲区中:
const char fdelim = '\t';
char straddress[256];
int zip;
cout << "Enter a record of data: ";
cin.getline(straddress, sizeof(straddress), fdelim);
cin >> zip;
cout << "\nStreet address : " << straddress << endl;
cout << "\nZip/Postal code: " << zip << endl;
更好的是,我改用std::getline()
,它读入std::string
而不是char[]
缓冲区:
const char fdelim = '\t';
string straddress;
int zip;
cout << "Enter a record of data: ";
getline(cin, straddress, fdelim);
cin >> zip;
cout << "\nStreet address : " << straddress << endl;
cout << "\nZip/Postal code: " << zip << endl;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.