我一直在研究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;
答案 0 :(得分:3)
该行
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;
答案 1 :(得分:0)
假设用户在键入\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;