Обработка ввода в элементы структуры с массивом - PullRequest
2 голосов
/ 19 сентября 2009

Я выполняю задание, которое включает структуры.

Вы должны создать структуру с тремя переменными и объявить 3 экземпляра этой структуры. Затем программа попросит пользователя ввести 9 частей информации. Мне не нравится вводить cout и cin без необходимости (9 раз подряд?), Поэтому я подумал, что могу использовать циклы для обработки ввода, как я делал с массивами ранее. Я попробовал, но пока безуспешно. Я к чему-то отношусь с этим?

struct Randomstruct {
  int var1, var2, var3;
}

int main() {
  Randomstruct struct1, struct2, struct3;
  for(int i = 1; i<=3; i++) {
    for(int j = 1; j<=3; j++) {
      cout << "Enter data for var" << j << " in struct" << struct(i) << ": ";
      cin struct(i).var(i);
      }
    }
  }
}

Мне действительно интересно, как я могу заставить работать struct (i) .var (i). Это вообще возможно?

Ответы [ 3 ]

2 голосов
/ 19 сентября 2009

Слегка подправьте ваш синтаксис:

struct Randomstruct
{
    int var[3];  // Use an array to index things by integer.
}; // You forgot this semicoln

int main()
{
    Randomstruct struct[3];  // Again another array

    // Nearly all programming languages used 0 based arrays.
    // So loop from  0 -> (array size -1) ie use smaller than
    for(int i = 0; i<3; i++)
    {
       // Again user 0 based index.
       for(int j = 0; j<3; j++)
       {
           cout << "Enter data for var" << j << " in struct" << struct(i) << ": ";

           // Use the >> operator to get stuff from the stdin.
           // Arrays are indexed via the operator [<index>]
           cin >> struct[i].var[j];
       }
    }
}
0 голосов
/ 19 сентября 2009

Вы могли бы сделать это, но это кажется немного глупым:

#include <iostream>

typedef struct _random_struct
{
    int var1;
    int var2;
    int var3;
} random_struct;

typedef struct _other_struct
{
    int var[3];
} other_struct;

union being_lazy
{
    random_struct r;
    other_struct o;
};


int main()
{
    random_struct st[3];
    being_lazy l[3];
    for(int i = 0; i < 3; ++i)
    {
        for(int j = 0; j < 3; ++j)
        {
            std::cout << "Enter data for var" << j << " in struct" << i << ": ";
            std::cin >> l[i].o.var[j];
        }
    }

    for(int i = 0; i < 3; ++i)
    {
        st[i] = l[i].r;
    }

    for(int i = 0; i < 3; i++)
    {
        std::cout << "struct" << i << ".var1 == " << st[i].var1 << std::endl;
        std::cout << "struct" << i << ".var2 == " << st[i].var2 << std::endl;
        std::cout << "struct" << i << ".var3 == " << st[i].var3 << std::endl;
    }
}

Вам необходимо убедиться, что и random_struct, и other_struct имеют одинаковую структуру в памяти, иначе могут произойти плохие вещи.

Действительно, если вы обращаетесь к отдельным полям слишком болезненно, вы либо просто хотите напрямую использовать массивы, либо переосмыслить свой код.

0 голосов
/ 19 сентября 2009
нет

Нет

Структура (i) .var (i) не будет работать.

Вы можете создавать векторы / массивы, но если вы написали задачу, это звучит как недопустимое.

Пример

struct Randomstruct {
    int var[3];
};

... и доступ с помощью

struct1.var[i]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...