2017-09-14 14 views
-4
bool guess(char c) 
{ 
    if (guesses[c]) 
    { 
     guesses[] = c; 
     return true; 
    } 
    else if (c > ='a' && c <= 'z') 
    { 
     guesses[] = c; 
     return false; 
    } 
} 

bool guesses[255] = {}; 

人がa - zの間にcharを入力しているかどうかを確認する必要があります。そうでない場合はtrueを返します。そうでなければfalseを返します。どちらの方法でも、私はcharで推測を更新します。今は配列にcharを追加する方法を理解していないので、次回チェック時にfalseとなり、すでに推測されていることを伝えます。私はこれがASCIIテーブルを使用していることを理解していますが、私は紛失しています。誰もがなぜこれがうまくいかないのか説明できますか?私は現在、エラーシンプルワード推測ゲーム

を前に、プライマリ・表現を期待します

']'

が、私が出て挟む取る場合、私は

をBOOLする

互換性のないchar型を取得します

これは意味がありますが、また

guesses[c] = c; 

しかし、あなたドン:あなたは、現在のインデックスを提供していないので、私はそれがとても文字cがあなたが空のあなたのブラケットを残してきた

+0

これはコンパイルすらありませんあなたへ? ***推測[] = c; *** –

+0

配列 'bool guesses [255]'はどのような表現ですか?あなたは 'guesses [] = c;'と書くときに何をしたいですか? –

+0

いいえ、あなたは私に答えていません。私はコード行の文字通りの意味を聞いていません。私は配列が何を表しているのか尋ねています。そして同じ理由のために、あなたは私の2番目の質問に答えることができません。 –

答えて

1

ブール配列で真のマークされている場所を作るのですか*をコンパイルし、あなたの問題を解決します

guesses[c] = true; 

:「tはあなたがboolを割り当てたいと思い、guessescharを割り当てます。
* > =の構文エラーもあります。これは、エディタから質問へのコピー+貼り付けの問題であると仮定していますが、これもまた>=に修正する必要があります。あなたの関数guessも、返されない可能性があります(ifまたはelse ifが真でない場合)。これは未定義の動作です。すべての制御パスが値を返すようにする必要があります。また、これらのことについて警告されるように、最も高い警告レベルでコンパイルするようにしてください。

あなたのデザインはありません。

あなたはa-zという文字しか扱っていないので、255個の要素すべてを割り当てる必要はありません。あなたは、単にマイナス正しいインデックスを取得するために、文字ができます

bool guesses[26]; 

if (c >='a' && c <= 'z') 
    guesses[c-'a'] = true; 

は文字が押されたかどうかを追跡するために、std::setを使用して代わりにユニークな要素のコンテナを考えてみましょう:

#include <set> 

std::set<char> guesses; 

bool guess(char c) 
{ 
    // Have we already inserted this character? 
    if (guesses.find(c) != std::end(guesses)) 
    { 
     // Character has already been guessed: 
     std::cout << "This character has already been guessed"; 
     return true; 
    } 
    else if (c >= 'a' && c <= 'z') 
    { 
     // Valid guess: 
     guesses.insert(c); 
     return false; 
    } 
}