繁体   English   中英

C ++中的cin.get()函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM