【问题标题】:Input elements of structure in C++C++中结构的输入元素
【发布时间】:2018-02-11 16:52:19
【问题描述】:

我正在尝试在 C++ 14 中实现一个结构。我创建了一个具有 3 个 int 值的结构

struct mystruct{
    int a;
    int b;
    int c;
};

在我的主函数中,我用以下方式初始化一个结构数组:

int main(){
    mystruct X[] = {{1,2,3}, {4,5,6}};
    .
    .
}

我会将这个数组传递给一个函数,在该函数中我将对其执行一些操作。该功能可能是:

int myfunc(mystruct X[]){
    //do something
}

如何使用cin 将此数组的值作为用户输入,而不是对其进行硬编码(可能使用对象)?我不知道该怎么做。

编辑:我希望这可以使用对象以某种方式实现

【问题讨论】:

  • 这完全取决于输入的结构:每行一个值,一个对象的所有三个值在一行上,用空格分隔,或者可能是其他东西。首先,您需要弄清楚您期望的输入格式是什么,然后您应该在您的 C++ 书中找到有关如何处理输入的完整、详细的信息。这太宽泛了。
  • 您的代码和您的问题看起来无关紧要。
  • "input to be an array with elements of type mystruct" 在 C++ 中不是一个逻辑上有意义的句子。 “输入”不是任何东西的数组,也不是任何mystruct 的数组。这是一个字符流。
  • 您是否希望用户一个接一个地输入值并且永不停止?您是否希望您的用户在输入数据之前选择他们希望输入的数组元素数量?用户是每行输入三个值还是每行输入一个值?

标签: c++ arrays structure c++14


【解决方案1】:

您可以为您的struct 实现一个输入运算符。这样的事情会起作用:

std::istream& operator>>(std::istream& is, mystruct& st)
{
    return is >> st.a >> st.b >> st.c;
}

现在您可以像这样从mystruct 阅读:

mystruct t;
std::cin >> t;

(注意上面的函数不处理错误)

现在可以通过使用循环非常简单地将这些新结构添加到数组中。 (我建议在这里使用std::vector)。

这是一个使用std::vector的示例:

std::vector<mystruct> arr;

for (mystruct t; std::cin >> t;)
{
    arr.push_back(t);
}

myfunc(arr.data()); // Or you could change the signature of the 
                    // function to accept a vector

【讨论】:

  • @TheDude 我也可以使用矢量
  • 能否详细说明for (mystruct t; std::cin &gt;&gt; t;)。我第一次看到这样的语法
  • @decukor 现在您已经为mystruct 定义了operator&gt;&gt;,您可以使用循环读取它。基本上,每次迭代都会创建一个新的mystruct,然后输入它的值。要终止循环,您将输入 EOF,否则输入必须以某种方式失败。这相当于:mystruct t; while (std::cin &gt;&gt; t) { arr.push_back(t); }.
  • @Arnav Borborah。这对我来说是新的。感谢您的帮助
猜你喜欢
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多