Может кто-нибудь сказать мне, что не так с моим кодом? - PullRequest
0 голосов
/ 28 января 2019

Я новичок в программировании и в C ++.Если это звучит глупо, то вы знаете, почему.У меня проблемы с моим кодом.По какой-то причине не все строки с 4 буквами не попадают в мой массив, когда я сделал функцию, чтобы это произошло.Кроме того, строки с 6 буквами также попадают в мой массив, которые должны храниться только в 4 или что-либо, что пользователь хочет поместить.

Я много пробовал, что даже не могу их перечислить.

#include <iostream>
#include <string>
#include <windows.h>

using namespace std;

int main()
{
    string LetterInput, LetterLoad, input;
    string Words[] = {"camera","lotion","fire","eggs","roll"};
    string PossibleAnswers[] = {};
    int Number;
    int Size;
    bool YesorNo = false;

cout << "Lets play HANGMAN! " << endl;
Sleep(500);

cout << "Think of a word and type in the number" << endl;
cout << "of letters there are" << endl;
cin >> Size;

for (int i = 1; i <= Size; i++){
    LetterLoad += "_";
}

for (int i = 0; i <= sizeof(Words)/sizeof(string); i++){
    if (Size == Words[i].size()){
        PossibleAnswers[i] = Words[i];
    }
}

cout << PossibleAnswers[0] << endl;
cout << PossibleAnswers[1] << endl;

Мои ожидаемые результаты для массива будут отображать "fire","eggs","rolls" только в этом порядке.Но фактические результаты, "camera","lotion","fire","eggs".Lol в чем проблема.

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Вот исправления к вашему коду.Как сказано в комментариях, простой способ сделать это - использовать std::vector вместо массивов.Следует избегать массивов в C ++ (вообще говоря).

#include <vector>

...

vector<string> Words{"camera","lotion","fire","eggs","roll"};
vector<string> PossibleAnswers;

...

for (size_t i = 0; i < Words.size(); i++){
    if (Size == Words[i].size()){
        PossibleAnswers.push_back(Words[i]);
    }
}

Обратите внимание на использование push_back для добавления элемента в вектор.Это то, что вы не можете сделать с массивом, так как массивы всегда имеют фиксированный размер.Это была ваша основная ошибка.

0 голосов
/ 28 января 2019

У вас есть несколько проблем.Большинство из них из-за вашего старого кода C ++.Всегда используйте новейший доступный стандарт, в вашем случае, вероятно, C ++ 14 или даже C ++ 17.

Для краткости: используйте std::vector

Всегда избегайте работы с необработанными массивами.Вместо этого используйте контейнерные классы стандартной библиотеки, они облегчат вашу жизнь.В этом случае std::vector должен быть вашим выбором, так как это простой в использовании и динамически размещаемый (изменяемый размер) массив.

std::vector<std::string> words {"camera","lotion","fire","eggs","roll"};
std::vector<std::string> possible_answers;

В настоящее время вы используете пустой массив возможного ответа, что означает, что у вас нет элементоввнутри.Но - вы пытаетесь использовать эти элементы.Вместо этого попробуйте следующее:

for(i = 0; i < words.size(); ++i)
    if(size_input == words[i].size())
        possible_answers.push_back(words[i]);

Вы должны использовать #include <vector>, чтобы иметь возможность использовать вектор.

И я бы предпочел std :: this_thread :: sleep_for (std:: хроно :: миллисекунды (500) в течение сна (500).Старайтесь избегать специфичных для платформы функций, если в стандарте есть альтернатива.Чтобы иметь возможность использовать это, включите заголовок <thread>.

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