-2
私は、推測の基本的なゲームを作る必要があり、コードをループする方法を知らないので、ユーザーはエラーに合ったときに再び答えを入力します。 エラーが発生した場合、irepeatコードはどのようにして表示されますか?
#include <iostream>
#include <stdlib.h> //srand
#include <time.h> // time
#include <vector>
#include <stdexcept>
void error(std::string s)
{
throw std::runtime_error(s);
}
int main()
{
int characters ,length ,guess_number = 0,letter_number = 0, total_guess = 0 , err_count = 0;
char letters,guess;
std::vector <char> v;
std::vector <char> answer;
std::cout << "Enter the amount of different characters: ";
std::cin >> characters;
std::cout << "Enter the pattern length ";
std::cin >> length;
if(length > 26)
{
error("Length can't be over 26");
}
srand (time(NULL));
for(int i =0; i < length ; i++)
{
letters = rand()% (26-(26-characters))+65; //ascii code for Upper case letters. we discard the 26-characters to only generate random numbers up until how many characters.
letter_number++;
v.push_back(letters); //random letters
}
for(int i = 0;i <v.size(); i++)
std::cout << v[i];
try
{
while(guess_number != letter_number)
{
std::cout << "Enter your guess: ";
while(std::cin >> guess)
{
answer.push_back(guess); //user guess
if (std::cin.peek() == '\n')
break;
}
total_guess ++;
if(v.size() != answer.size())
{
error("Answer too short");
}
for(int i = 0; i < v.size(); i++)
{
if(v[i] == answer[i])
{
guess_number++;
}
}
if(guess_number != letter_number)
{
std::cout << "you have guessed " << guess_number << " characters correctly." << std::endl;
guess_number = 0;
answer = {};
}
else if(guess_number == letter_number)
{
std::cout << "You have guessed " << guess_number << " characters correctly" << std::endl;
std::cout << "You guesses the pattern in " << total_guess << " guesses";
break;
}
}
}
catch(std::runtime_error& error)
{
std::cerr << "error: "<< error.what() << std::endl;
return 1;
}
return 0;
}
は基本的に私は、ユーザーがランダムな文字ベクトルより短い答えを入力すると、再びユーザーを依頼するプログラムを作成する方法がわからない:これは私が書いたコード全体です。この部分の後:
if(v.size() != answer.size())
{
error("Answer too short");
}
私はそれを実行し、何か短い時間を入力した後、プログラムはエラーを返し、代わりに終了します。
あなたはどうばかり[* 'continue'の*](http://en.cppreference.com/としてAB "を生成" するようにコードを変更w/cpp/language/continue)ループ? –
ユーザーが少なすぎる文字を入力すると、実際には例外ですか?私はそれが本当に例外的な状況ではないということですか?彼らの答えが短すぎるかどうかを表すフラグを維持するのはいかがですか? whileループでフラグをチェックします(ユーザーの回答が短すぎる場合は、ループを再実行し、エラーをスローするにはフラグをtrueに設定し、そうでない場合はfalseに設定します)。 –
または、ちょうど言ったいくつかのプログラマーのおっぱいのように、答えがあまりにも短い場合は、ループの先頭にスキップしてください。 –