C # perché sta saltando la mia console.readline ()?

Quindi il programma funziona correttamente, ma per qualche motivo, al secondo tentativo, salta del tutto il prompt di Console.ReadLine (). Ho eseguito il debug e ho confermato che non si tratta di un problema di loop poiché sta entrando nel metodo, visualizzando WriteLine e saltando completamente ReadLine, restituendo di nuovo uno spazio vuoto a Main () causandone l’uscita. Che diavolo? Qualche idea?

ecco il codice.

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

È a causa della tua chiamata a Console.Read() nel metodo DisplayResults . In genere legge solo un carattere. Se si preme INVIO (che in realtà è una combinazione di 2 caratteri – ritorno a Console.Read() e avanzamento riga) su Console.Read() ottiene solo il carattere di ritorno a capo e l’avanzamento riga arriva al metodo di lettura console successivo – Console.ReadLine() in GetInput() metodo. Poiché il carattere di avanzamento riga è anche un carattere di Console.ReadLine() Linux, Console.ReadLine() legge come una riga.

Prova a cambiare Console.Read() nel metodo DisplayResults su Console.ReadLine() . Sembra che tutto si comporti come dovrebbe.

Hai detto la seconda volta. Osservando il tuo ciclo di do-while, questo verrebbe a cadere perché la variabile inString è inizializzata e non vuota.

A proposito, di solito più sicuro da usare

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

piuttosto che confrontare direttamente con una stringa vuota.