C ++ Случайное число для печати строки в массиве - PullRequest
0 голосов
/ 09 сентября 2018

Я работаю над школьным проектом, в котором мне нужно создать программу печенья с предсказаниями. Основа программы заключается в том, что она создает случайное число, которое затем присваивается «удаче» в массиве, который будет распечатываться на экране. Мне нужна помощь в получении случайного числа, которое генерируется для распечатки предопределенной строки в массиве.

Кроме того, чтобы это выглядело необычно, я хотел бы создать цикл for, который будет создавать границы вокруг каждого состояния, поскольку они имеют разную длину, поэтому они выглядят единообразно и выглядят лучше, чем необходимость делать это вручную.

Любая помощь будет полезна

Вот код:

fortunecookie.h

#ifndef FORTUNECOOKIE_H_INCLUDED
#define FORTUNECOOKIE_H_INCLUDED
#include <cstring>
#include <cstdlib>

using namespace std;

class Fortunecookie
{
private:
   string fortune[10];
   int rand_index;
public:
   void openFortuneCookie();
   void generateNewFortune();
   FortuneCookie();
};

#endif // FORTUNECOOKIE_H_INCLUDED

fortunecookie.cpp

#include <iostream>
#include <ctime>
#include "fortunecookie.h"
using namespace std;


void Fortunecookie::generateNewFortune()
{
string fortune [10] = {" One that would have the fruit must climb the tree",
                   " A new opportunity awaits you at the fork of the road",
                   " The early bird gets the worm, but the second mouse gets     the cheese. ",
                   " You are cleverly disguised as responsible adult.",
                   " The best things in life aren't things",
                   " Forget injuries; never forget kindnesses.",
                   " Borrow money from a pessimist. They don't expect it       back",
                   " Your good enough, strong enough and gosh darnit' people     like you",
                   " A feather in the hand is better than a bird in the     air. ",
                   " In life, you must be the water"
                  };
for (int i=0; i<10; i++)
{
   srand(time(0));
   rand_index = rand() %10 +1;
}
}

Fortunecookie::FortuneCookie()
{
if (rand_index == 1)
{
    fortune[1]=rand_index;
}
if (rand_index == 2)
{
    fortune[2]=rand_index;
}
if (rand_index == 3)
{
    fortune[3]=rand_index;
}
if (rand_index == 4)
{
    fortune[4]=rand_index;
}
if (rand_index == 5)
{
    fortune[5]=rand_index;
}
if (rand_index == 6)
{
    fortune[6]=rand_index;
}
if (rand_index == 7)
{
    fortune[7]=rand_index;
}
if (rand_index == 8)
{
    fortune[8]=rand_index;
}
if (rand_index == 9)
{
    fortune[9]=rand_index;
}
if (rand_index == 10)
{
    fortune[10]=rand_index;
}
}
void Fortunecookie::openFortuneCookie()
{

Fortunecookie::generateNewFortune();

cout << " |====================================================================| \n";
cout << " |\t\t\t\t\t\t\t\t      | \n";
cout << " |\t\t\t\t\t" <<rand_index<< "\t\t\t      |\n";
cout << " |\t\t\t\t\t\t\t\t      | \n";
cout << "     |====================================================================| \n";

}

main.cpp

#include <iostream>
#include "fortunecookie.h"
 using namespace std;

 int main ()
 {
 Fortunecookie yourfortune;
 yourfortune.generateNewFortune();
 yourfortune.FortuneCookie();
 yourfortune.openFortuneCookie();
 return 0;
 }

Вот детали проекта:

Для этой лаборатории вы создадите класс Fortune Cookie. Загрузите сжатый файл, содержащий три файла для этой программы.

  - fortunecookie.h
  - fortunecookie.cpp
  - fortuneDriver.cpp

Каждое печенье с предсказанием будет иметь массив из 10 строк, которые будут содержать разные состояния. Вы можете составить 10 состояний. Одно из этих состояний будет активным. Это активное состояние будет выбрано путем генерации случайного числа для индекса в массиве.

Печенье с предсказанием будет иметь следующие методы:

void generateNewFortune (); Сводка: эта функция создает новый случайный индекс, который представляет другое состояние. Фортуна хранится в массиве строк с именем fortunes, размером 10. Предварительные условия: массив из 10 состояний был инициализируется так, чтобы не было пустых строк. Постусловия: новый индекс между 0 и 9 был генерируется и присваивается rand_index.

void openFortuneCookie (); Описание: Эта функция отображает состояние в rand_index в массиве // строк. Образец вывода показано ниже:

| ========================= | | Вы получите отличные новости! | ========================= |

Предварительные условия: Массив строк с состояниями был инициализирован. Rand_index было присвоено значение от 0 до 9. Постусловия: случайное состояние отображается в формате показано выше.

FortuneCookie (); Сводка: конструктор по умолчанию назначает состояние каждому Индекс в массиве удачи. Также инициализирует rand_index на случайное число от 0 до 9. Предварительные условия: FortuneCookie имеет значения мусора в переменные. Постусловия: объект FortuneCookie был инициализирован так что rand_index имеет значение от 0 до 9, а массив состояний имеет удача в каждом индексе.

1 Ответ

0 голосов
/ 09 сентября 2018

В этом коде есть несколько ошибок:

  • Первый C ++ чувствителен к регистру, поэтому вы должны выбрать один раз, чтобы он был Fortunecookie или FortuneCookie.
  • Конструктор по умолчанию - это первое, что создается при создании нового файла cookie. Согласно требованиям, там вы должны инициализировать строки состояния.
  • в main() вы не должны явно вызывать конструктор по умолчанию. Он вызывается в операторе, где вы определяете объект.
  • Вы пытаетесь инициализировать состояния, которые вы пишете в функции-члене string fortune [10] = {...};. К сожалению, это объявление локального массива удачи, который скрывает массив удачи класса и который вы надеялись инициализировать
  • индекс должен быть от 0 до 9, иначе вы выйдете за пределы диапазона.
  • Последовательность, в которой вы пытаетесь установить состояние в длинной, если цепочка озадачивает.

Скорректировано main():

int main ()
{
    srand(time(0));                    // only once, at the beginning of the programme
    Fortunecookie yourfortune;         // this calls the default constructor
    //yourfortune.generateNewFortune();// not needed, you call it in openFortune()
    //yourfortune.Fortunecookie();       // OUCH !!
    yourfortune.openFortuneCookie();
    return 0;
}

Конструктор должен затем взять инициализацию строки. Вот пример с фиксированным строковым массивом в качестве инициализатора. Но вы также можете назначить каждый элемент массива индивидуально:

Fortunecookie::Fortunecookie()
               : fortune{" One that would have the fruit must climb the tree",
                   " A new opportunity awaits you at the fork of the road",
                   " The early bird gets the worm, but the second mouse gets     the cheese. ",
                   " You are cleverly disguised as responsible adult.",
                   " The best things in life aren't things",
                   " Forget injuries; never forget kindnesses.",
                   " Borrow money from a pessimist. They don't expect it       back",
                   " Your good enough, strong enough and gosh darnit' people     like you",
                   " A feather in the hand is better than a bird in the     air. ",
                   " In life, you must be the water"
                  }
{
    rand_index = rand() %10;  // number between 0 and 9 
}

Создание нового файла cookie упрощается (хотя вы можете полностью избавиться от этой функции, поскольку индекс уже инициализирован случайным числом при создании файла cookie):

void Fortunecookie::generateNewFortune()
{
    rand_index = rand() %10;
}

Вы также можете улучшить печать состояния, добавив строку:

void Fortunecookie::openFortuneCookie()
{
    generateNewFortune();

    cout << " |====================================================================| \n";
    cout << " |                                                                    | \n";
    cout << " | " <<setw(2)<<rand_index+1<<"-"<<setw(63)<<fortune[rand_index]<< " |\n";
    cout << " |                                                                    | \n";
    cout << " |====================================================================| \n";
}

Infally, здесь онлайн демо

...