2

したがって、プログラムは正しく動作していますが、何らかの理由で、2 回目には Console.ReadLine() プロンプトを完全にスキップしています。私はデバッグを実行し、実際にメソッドに入り、WriteLine を表示してから ReadLine を完全にスキップし、Main() に空白を返して終了させるため、ループの問題ではないことを確認しました。何のデュース?何か案は?

これがコードです。

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

namespace LAB4B
{
    class Program
    {
        static void Main(string[] args)
        {
            string inString;
            ArrayList translatedPhrase = new ArrayList();

            DisplayInfo();
            GetInput(out inString);

            do
            {
                GetTranslation(inString, translatedPhrase);
                DisplayResults(inString, translatedPhrase);
                GetInput(out inString);
            } while (inString != "");

        }

        static void DisplayInfo()
        {
            Console.WriteLine("*** You will be prompted to enter a string of  ***");
            Console.WriteLine("*** words. The string will be converted into ***");
            Console.WriteLine("*** Pig Latin and the results displayed. ***");
            Console.WriteLine("*** Enter as many strings as you would like. ***");
        }

        static void GetInput(out string words)
        {

            Console.Write("\n\nEnter a group of words or ENTER to quit: ");
            words = Console.ReadLine();            
        }

        static void GetTranslation(string originalPhrase, ArrayList translatedPhrase)
        {
            int wordLength;                       
            string[] splitPhrase = originalPhrase.Split();

            foreach (string word in splitPhrase)
            {
                wordLength = word.Length;
                translatedPhrase.Add(word.Substring(1, wordLength - 1) + word.Substring(0, 1) + "ay");
            }          




        }

        static void DisplayResults(string originalString, ArrayList translatedString)
        {
            Console.WriteLine("\n\nOriginal words: {0}", originalString);
            Console.Write("New Words: ");
            foreach (string word in translatedString)
            {
                Console.Write("{0} ", word);
            }

            Console.Read();
        }

    }
}
4

3 に答える 3

10

メソッドのConsole.Read()呼び出しが原因です。DisplayResults通常は 1 文字だけを読み取ります。ENTER (実際には 2 文字の組み合わせ - キャリッジ リターンとライン フィード) を押すとConsole.Read()、キャリッジ リターン文字のみが取得され、ライン フィードは次のコンソール読み取りメソッド - Console.ReadLine()inGetInput()メソッドに取得されます。改行文字もlinuxのENTER文字なConsole.ReadLine()ので、1行として読み込みます。

于 2010-09-27T00:14:10.833 に答える
2

メソッドの を に変更してみてConsole.Read()ください。これにより、すべてが正常に動作するようです。DisplayResultsConsole.ReadLine()

于 2010-09-27T00:09:00.683 に答える
0

あなたは2回目のラウンドを言いました。do-whileループを見ると、変数inStringが初期化されており、空ではないため、これは失敗します。

ところで、通常はより安全に使用できます

do
{
} while (!String.IsNullOrEmpty(inString));

空の文字列と直接比較するよりも。

于 2010-09-27T00:15:26.930 に答える