这是代码:
// pointers to structures
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
struct movies_t {
string title;
int year;
};
int main ()
{
string mystr;
movies_t amovie;
movies_t * pmovie;
pmovie = &amovie;
cout << "Enter title: ";
getline (cin, pmovie->title);
cout << "Enter year: ";
getline (cin, mystr);
(stringstream) mystr >> pmovie->year;
cout << "\nYou have entered:\n";
cout << pmovie->title;
cout << " (" << pmovie->year << ")\n";
return 0;
}
取自http://www.cplusplus.com/doc/tutorial/structures/。我希望我能在一些事情上得到澄清。
什么是
getline
?它如何工作?我尝试查找文档,但是仍然难以理解。另外,cin
到底是什么?它如何与getline
一起使用?如果我理解正确,
pmovie->title
本质上说pmovie
指向对象title
的成员amovie
?如果是这样,并且从#1的解释中还不清楚,getline (cin, pmovie->title)
是如何工作的?现在,这个
(stringstream) mystr >> pmovie->year
给我带来了最大的麻烦。什么是stringstream
,例如,我们是否像将double转换为int那样使用它?谢谢你们!
最佳答案
什么是getline,它如何工作?我尝试查找文档,但是仍然难以理解。另外,cin到底是什么,以及如何与getline一起使用?getline
函数从istream
读取一行。 cin
流是指您通常从中获取输入的标准输入流。它被传递给getline
告诉它从哪个输入流获得行。
如果我理解正确,pmovie-> title本质上就是说pmovie指向对象amovie的成员标题?如果是这样,并且从对#1的解释中还不清楚,那么getline(cin,pmovie-> title)如何工作?getline
函数从cin
读取一行并将其存储在pmovie->title
中,该行通过引用传递。
现在,这(stringstream)mystr >> pmovie-> year给了我最大的麻烦。什么是字符串流?例如,我们是否像在将double转换为int那样使用它?stringstream
是使字符串像流一样起作用的类。这是一种令人困惑的语法(C风格的强制转换),使它很难理解正在发生的事情。基本上,将创建一个临时stringstream
并使用mystr
的内容进行初始化。用字符串初始化时,stringstream
会为您提供一个流,您可以从中读取这些内容。在这种情况下,>>
运算符从输出流读取到pmovie->year
,该流又通过引用传递。
顺便说一句,在我看来,您似乎正在尝试了解异常复杂且令人困惑的用法,而尚未了解这些对象的更基本用法。那是很难学习的方法。
关于c++ - 指向结构的指针-无法理解特定的代码片段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12030852/