1

問題が解決しました!君たちありがとう!!!

C#に関する質問です。

私は4つのオプションを持つメニューを持っています:

  1. 単語を追加
  2. 単語リストを表示
  3. 遊ぶ
  4. 終了する

私はスイッチでそれを作成しましたが、選択のいずれかが実行された後に多くに戻ることができるように、スイッチは while ループ内にあります。

私が抱えている問題は、メニューから選択しても何も起こらず、プログラムが停止したというエラーメッセージが表示されることです..そして、ループしていません.ループ。そのため、while ループ内のスイッチで何かが機能していません。

与えられた助けに本当に感謝します。私は初心者なので、簡単に説明してみてください:)

これまでに2つのファイルに配置したすべてのコードを貼り付けています。1 つは program.cs と呼ばれ、もう 1 つは wordlist.cs と呼ばれます。

program.cs ファイル:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

class Hangman
{
    static void Main()
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.Title = "C# Hangman";
        Console.WriteLine("Welcome To C# Hangman!");

        //MENU
        int MenuChoice = 0;
        while (MenuChoice != 4)
        {

        Console.Write("\n\t1) Add words");
        Console.Write("\n\t2) Show list of words");
        Console.Write("\n\t3) Play");
        Console.Write("\n\t4) Quit\n\n");

        Console.Write("\n\tChoose 1-4: ");        //Choose meny item

        MenuChoice = Convert.ToInt32(Console.ReadLine());
        WordList showing = new WordList();

        MenuChoice = int.Parse(Console.ReadLine()); 

        switch (MenuChoice)
        {
            case '1':               
                Console.Write("\n\tAdd a word\n\n");
                var insert = Console.ReadLine();
                showing.AddWord(insert);
                Console.Write("\n\tList of words\n\n");
                showing.ListOfWords();                
                break;
            case '2':
                Console.Write("\n\tList of words\n\n");
                showing.ListOfWords();



                break;


            case '3':   //Running game

                int guesses;
                Console.Write("\n\tHow many faults can you have: ");
                guesses = Convert.ToInt32(Console.ReadLine());
                Console.Write("\n\tAwesome, let´s play!\n");


                String input;
                bool wrong;
                int NumberOfTries = 0;


                do
                {
                    Console.WriteLine("\n\n\tWrong guesses: " + NumberOfTries + " / " + guesses + "\n");
                    Console.WriteLine("\n\tGuessed letters:\n");
                    Console.WriteLine("\n\tWord:\n");
                    Console.Write("\n\n\tGuess letter: ");
                    input = Console.ReadLine();
                    Console.Write("\n\n\t ");

                    wrong = !input.Equals("t") &&
                          !input.Equals("e") &&
                          !input.Equals("s") &&
                          !input.Equals("t");
                    if (wrong)
                    {
                        NumberOfTries++;
                        Console.WriteLine("\n\tWrong letter " + "Try again!");
                    }
                    if (wrong && (NumberOfTries > guesses - 1))
                    {
                        Console.WriteLine("\n\tYou have failed " + guesses + ". End of game!\n");
                        break;
                    }

                } 
                while (wrong);
                if (!wrong)
                    Console.WriteLine("\n\tWhohoo congrats!");

                break;

            case '4':
                Console.WriteLine("\n\tEnd game?\n\n");
                break;
            default:
                Console.WriteLine("Sorry, invalid selection");
                break;  
        }
        MenuChoice++;
        if (MenuChoice < 30)
            continue;
        else
            break;
        }

    }

}

WordList.cs ファイル:

using System;
using System.Collections.Generic;

class WordList
{
    List <string> words = new List<string>();

    public void ListOfWords()
    {
        words.Add("test");         // Contains: test
        words.Add("dog");          // Contains: test, dog
        words.Insert(1, "shit"); // Contains: test, shit, dog

        words.Sort();
        foreach (string word in words) // Display for verification
        {
            Console.WriteLine(word);

        }

    }

    public void AddWord(string value){
        words.Add(value);
      }
}
4

5 に答える 5

3

何が起こっているのかを説明するために、独自のコードのサブセットをエコー バックします。具体的には、これは、それ自体MenuChoiceを除いて、に触れるすべてのものswitchです。

int MenuChoice = 0;
while (MenuChoice != 4)
{
    MenuChoice = Convert.ToInt32(Console.ReadLine());
    MenuChoice = int.Parse(Console.ReadLine()); 

    // switch here.

    MenuChoice++;
    if (MenuChoice < 30)
        continue;
    else
        break;
    }
}

このコードのサブセットができたので、手順を追って説明します。

set MenuChoice = 0
is MenuChoice != 4? Yes, so loop.
    set MenuChoice to a number from Console
    set MenuChoice to a number from Console
    do Switch logic
    set MenuChoice to MenuChoice + 1
    is MenuChoice < 30? Yes, so go to next loop
is MenuChoice != 4? Yes, so loop.
    set MenuChoice to a number from Console
    set MenuChoice to a number from Console
    do Switch logic
    set MenuChoice to MenuChoice + 1
    is MenuChoice < 30? Yes, so go to next loop
is MenuChoice != 4? Yes, so loop.
    set MenuChoice to a number from Console
    set MenuChoice to a number from Console
    do Switch logic
    set MenuChoice to MenuChoice + 1
    is MenuChoice < 30? Yes, so go to next loop
Repeat until 3 is entered.

MenuChoiceをインクリメントしている理由、または に対してテストしている理由はわかりませんが30、そのコードには意味がありません。

于 2013-04-19T16:01:11.940 に答える
1

あなたの主な問題は、余分な Console.ReadLine() ここにあるようです。最初に2番目を削除します

 MenuChoice = Convert.ToInt32(Console.ReadLine());
 WordList showing = new WordList();

 MenuChoice = int.Parse(Console.ReadLine()); // <--- Remove this line

スイッチのケースは、他の人が既に述べた理由 (int vs string) で正しくありませんが、それはエラーの原因ではありません。これにより、スイッチは常にdefaultステートメントを実行しますが、エラーは発生しません。ただし、それを修正する必要があることは間違いありません。

于 2013-04-19T16:02:03.647 に答える