2010-09-27 5 views
0

Итак, программа работает правильно, но по какой-то причине во второй раз она пропускает приглашение Console.ReadLine() вообще. Я прошел через debug и подтвердил, что это не проблема цикла, поскольку он действительно вводит этот метод, показывая WriteLine, а затем полностью пропускает ReadLine, возвращая пустую строку в Main(), заставляя ее выйти. Какая двойка? Есть идеи?C# почему он пропускает мой console.readline()?

вот код.

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(); 
     } 

    } 
} 

ответ

2

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

+0

О, ничего себе. Я не понял, что Read() повлияет на ReadLine(). благодаря – Sinaesthetic

9

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

0

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

Btw, как правило, безопаснее использовать

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

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

Смежные вопросы