所以程序运行正常,但由于某种原因,在第二次通过时,它完全跳过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();
}
}
}
答案 0 :(得分:9)
这是因为您使用Console.Read()
方法进行了DisplayResults
调用。它通常只读取一个字符。如果你在Console.Read()
上按ENTER(实际上是两个字符的组合 - 回车和换行),它只会得到回车字符,换行符会转到下一个控制台阅读方法 - Console.ReadLine()
在{ {1}}方法。由于换行符也是linux ENTER字符,GetInput()
将其读为一行。
答案 1 :(得分:2)
尝试将Console.Read()
方法中的DisplayResults
更改为Console.ReadLine()
。这似乎使一切都表现得如此。
答案 2 :(得分:0)
你第二次说了。看看你的do-while循环,那将会失败,因为你的变量 inString 是初始化的而不是空的。
顺便说一句,通常使用起来更安全
do
{
} while (!String.IsNullOrEmpty(inString));
而不是直接与空字符串比较。