这是代码:

// 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/

10-12 16:01