Отображение последовательного значения переменной с помощью цикла while

Я сделал одну программу:

char a1[100]="Ques 1" , a2[100]="Ques 2" , a3[100]="Ques 2";
int count=1;
while (count<=3)
{
  cout << ....;
}

Теперь я хочу отображать вопросы один за другим. Итак, что я набираю вместо ....? нравится

cout << a(count);

Так что вопросы отображаются по порядку.

заранее спасибо


person RK Tilak    schedule 25.08.2017    source источник
comment
Какие возражения у вас есть против std::string?   -  person Bathsheba    schedule 25.08.2017
comment
Я новичок, и я не знаю функции. Пожалуйста, дайте мне синтаксис.   -  person RK Tilak    schedule 25.08.2017
comment
for (const auto &q : {a1, a2, a3}) { std::cout << q << '\n'; }. На этот вопрос должен был ответить книга.   -  person nwp    schedule 25.08.2017
comment
еще лучше, a1, a2, a3 должны были быть одним массивом/контейнером/коллекцией для начала (практически на любом языке программирования, а не только на C++). Определенно потратьте еще немного времени на книги по программированию. Они должны представить все эти важные вещи.   -  person Fire Lancer    schedule 25.08.2017
comment
Более подходящим было бы использовать для ваших вопросов массив строк, а не дискретные массивы символов, a1, a2, a3 и т. д. См. эту статью для разных подходов, но подход №3 наиболее подходит для C++.   -  person lurker    schedule 25.08.2017
comment
@lurker Я не могу припомнить, чтобы когда-либо видел стиль : {a1, a2, a3}, используемый в каком-либо реальном коде. Бьюсь об заклад, я мог бы обыскать всю базу кода моей компании (проектов после С++ 11) и не найти этого.   -  person Fire Lancer    schedule 25.08.2017
comment
@FireLancer, ты совершенно неправильно понял мой комментарий. Я говорил, что OP вообще не нужно определять a1, a2, a3 и т. д., а вместо этого использовать массив или контейнер строк. Может быть, вы имели в виду комментарий nwp?   -  person lurker    schedule 25.08.2017
comment
Да, я прочитал № 3 совсем по-другому :)   -  person Fire Lancer    schedule 25.08.2017


Ответы (2)


Тот факт, что вы использовали разные переменные для каждого вопроса, затрудняет организацию этапа вывода.

Почему бы не использовать массив std::string?

std::string questions[] = {"Quesstion one", "Question two", "Question three"};

и вывод с помощью

for (auto& question : questions){
    std::cout << question;
}

Это использует инновации в C++11.

Наконец, чтобы прочитать текстовый файл в std::vector<std::string>, см. Чтение строки из текстового файла и помещение строк в вектор?

person Bathsheba    schedule 25.08.2017
comment
но если мне нужно напечатать большие вопросы, это будет сложно. Также я хочу написать 20-30 вопросов. - person RK Tilak; 25.08.2017
comment
Ну да, ваши руки могут болеть от набора текста. В конце концов вы прочитаете массив std::string из файла. - person Bathsheba; 25.08.2017
comment
как я могу использовать файл в std::string? - person RK Tilak; 25.08.2017
comment
См. это stackoverflow.com/questions/8365013/ - person Bathsheba; 25.08.2017
comment
Файл с расширением std::fstream. для строк, которые вы хотите std::getline. Я не рекомендовал бы изучать базовые концепции программирования с помощью вопросов и ответов, вы упустите важные вещи. Вот почему существуют книги и курсы. - person Fire Lancer; 25.08.2017
comment
@RKTilak: В шутку Turbo C++ не является компилятором C++. Это пережиток 1990-х годов, использование которого только повредит вашей рыночной стоимости. Подумайте о том, что это будет стоить вам 100 долларов в час каждый раз, когда вы портите свой опыт, борясь с этим. Проведите выходные за обновлением до бесплатного. gcc превосходен, хотя, к сожалению, я его больше не использую. - person Bathsheba; 25.08.2017
comment
Да, забудьте о Turbo C++, он древний и не поддерживается (даже не уверен в его преемнике C++ Builder). Если вы используете Windows, получите Visual Studio (бесплатно для личного пользования и малого бизнеса) visualstudio.com/vs/community< /а>. Если вы используете Linux или Mac, у вас есть GCC и ряд бесплатных IDE на выбор. - person Fire Lancer; 25.08.2017

Если вы должны использовать массивы символов, вам понадобится массив массивов символов.

const size_t MAX_QUESTION_LENGTH = 100;
const size_t MAX_QUESTIONS = 5;

char question_texts[MAX_QUESTIONS][MAX_QUESTION_LENGTH] =
{
  "Question 1",
  "Question 2",
  //...
  "Question 5",
};

int main()
{
  for (size_t i = 0; i < MAX_QUESTIONS; ++i)
  {
    std::cout << "\n"
              << question_texts[i]
              << "\n";
  }
  return 0;
}

Другой альтернативой является использование vector из string:

std::vector<std::string> question_database;
//...
question_database.push_back("Question 1");
//...
for (i = 0; i < question_database.size(); ++i)
{
  std::cout << "\n"
            << question_database[i]
            << "\n";
}

Емкость массивов должна быть указана во время компиляции.
Строки и векторы динамически увеличиваются во время выполнения.

person Thomas Matthews    schedule 25.08.2017