#c
#c
Вопрос:
Я пытаюсь автоматически установить количество заданных переменных, например:
char subject1[30];
char subject2[30];
char subject3[30];
float grade1;
float grade2;
float grade3;
cout << "Type in your first subject: " ;
cin >> subject1;
cout << "Type in your second subject: ";
cin >> subject2;
cout << "Type in your third subject: ";
cin >> subject3;
cout << "Type in your grade for: " << subject1 << " :";
cin >> grade1;
cout << "Type in your grade for: " << subject2 << " :";
cin >> grade2;
cout << "Type in your grade for: " << subject3 << " :";
cin >> grade3;
float sum = grade1 grade2 grade3;
float average = (sum / 3);
cout << "AVERAGE GRADE";
cout << "************************************" << endl;
cout << subject1 << grade1 << endl;
cout << subject2 << grade2 << endl;
cout << subject3 << grade3 << endl;
cout << "====================================" << endl;
cout << "Average: " << average << endl;
return 0;
Код, который вычисляет это, работает, но мне было интересно, как мне выставить 3 оценки, введенные пользователем. Таким образом, мне не нужно редактировать вычислительную часть каждый раз, когда я добавляю другой предмет. Я не уверен, хорошо ли я объяснил, что я имел в виду, но я надеюсь, что вы понимаете.
Комментарии:
1. Скорее всего, вы ищете либо массивы, либо какие-то динамически распределяемые контейнеры, такие
std::vector
как для лучшего хранения информации о предмете / оценке, либо такие, которые могут быть указаны во время выполнения. Кроме того, циклы могут быть использованы для уменьшения дублирования кода для работы с ранее упомянутыми контейнерами. Я бы рекомендовал посмотреть их, поскольку они являются основными концепциями для программирования практически на любом языке.2. И <алгоритм> может избежать ручного цикла.
3. @LemonDrop Большое вам спасибо за отзыв! Должным образом учтено!
Ответ №1:
Простым решением было бы сохранить все в vector
(это предпочтительнее в большинстве случаев по сравнению с тем, char array
который вы использовали), а затем просто выполнить цикл для количества предметов, которые у вас есть.
#include <vector> // need to inlcude this to be able to use vector
#include <iostream>
const int numSubjects = 3;
std::vector<std::string> prefix{"first", "second", "third"};
std::vector<std::string> subjects(numSubjects);
std::vector<float> grades(numSubjects);
for(int i = 0; i < numSubjects; i ) {
std::cout << "Type in your " << prefix[i] << " subject: ";
std::cin >> subjects[i];
std::cout << "Type in your grade for " << subjects[i] << ": ";
std::cin >> grades[i];
}
//afterwards do the calculations
Обратите внимание, что я инициализировал векторы размером numSubjects
, таким образом, вы можете получить доступ к индексам вектора и записать их с помощью []
оператора. Если вы не инициализируете vector
размер, то его можно использовать push_back()
для вставки элементов.
Комментарии:
1. Это здорово! Но, к сожалению, я все еще нахожусь в процессе изучения синтаксиса и не до конца понимаю написанный вами код. Думаю, мне следует попробовать сделать что-нибудь попроще. Есть какие-либо предложения о том, что я должен делать как новичок тогда?
2. @AlenNikolaus Не волнуйся, это не так сложно, как может показаться. В зависимости от того, насколько вы уже привыкли к структурам данных, вы могли бы посмотреть документацию для std::vector . Просто немного поиграйте с этим и посмотрите, что вы можете сделать. Также, если есть что-то конкретное, что неясно, просто дайте мне знать, и, возможно, я смогу дать лучшие указания.
3. Ну, «int i» меня сбивает с толку. Не совсем уверен, что это такое, и Google тоже не очень помогает
4.
int
это просто стандартный тип целого числа. В вашей оригинальной программе вы использовалиfloat
тип с плавающей запятой. Итак, для оценки, которую вы правильно использовалиfloat
, поскольку оценки не всегда являются целыми числами и могут иметь десятичную часть. Для вещей, которые могут и всегда будут целыми числами, такими как индекс в цикле, который вы обычно используетеint
.5. Я не уверен, что вы имеете в виду, говоря «вы можете получить доступ к индексам вектора и записать их с помощью оператора []». Где мне использовать оператор []?