C # почему пропускает мой console.readline ()? - PullRequest
0 голосов
/ 27 сентября 2010

Таким образом, программа работает правильно, но по какой-то причине во второй раз она вообще пропускает приглашение 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();
        }

    }
}

Ответы [ 3 ]

9 голосов
/ 27 сентября 2010

Это из-за вашего Console.Read() вызова в DisplayResults методе. Обычно он читает только один символ. Если вы нажмете ENTER (что на самом деле является комбинацией 2 символов - возврат каретки и перевод строки) на Console.Read(), он получит только символ возврата каретки, и перевод строки перейдет к следующему методу чтения консоли - Console.ReadLine() в методе GetInput(). Поскольку символ перевода строки также является символом ввода linux, Console.ReadLine() читает его как одну строку.

2 голосов
/ 27 сентября 2010

Попробуйте изменить Console.Read() в вашем DisplayResults методе на Console.ReadLine().Это, кажется, заставляет все вести себя как следует.

0 голосов
/ 27 сентября 2010

Ты сказал во второй раз.Глядя на ваш цикл do-while, это провалится, потому что ваша переменная inString инициализирована и не пуста.

Кстати, обычно безопаснее использовать

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

, чемнапрямую сравнивать с пустой строкой.

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