2016-10-26 13 views
1

Я делаю простой OS, используя космос. Я новичок в C#. Метод Run() в циклах кода по умолчанию в космосе до тех пор, пока я не покину VMware. Однако, как только я немного исправим, моя программа автоматически выйдет. Я не понимаю, почему. Я пытаюсь сделать цикл. код Cosmo по умолчанию, прежде чем исправить:C# run метод не looping

public class Kernel : Sys.Kernel 
{ 
    protected override void BeforeRun() 
    { 
     Console.WriteLine("Cosmos booted successfully. Type a line of text to get it echoed back."); 
    } 

    protected override void Run() 
    { 
     Console.Write("Input: "); 
     var input = Console.ReadLine(); 
     Console.Write("Text typed: "); 
     Console.WriteLine(input); 
    } 
} 

Ниже мой новый метод Run(). Все остальное остается прежним.

protected override void Run() { 
    Console.WriteLine("Input:"); 
    String input = Console.ReadLine(); 
    if (input.StartsWith("echo")) 
    { 
     var index = input.IndexOf("echo"); 
     var initial = input.Substring(0, index); 
     var final = input.Substring(index + "echo".Length); 
     var echoInput = initial + final; 
      Console.WriteLine(echoInput); 
     } 
} 
+0

Привет Mk, что вы имеете в виду пытаясь сделать его петлей? Вы дошли до того, что можете ввести ввод? Что вы подразумеваете под ** мой код автоматически выходит **, поэтому, если вы введете ** _ эхо, это тест _ ** вы должны увидеть ** _ это тест _ ** распечатано на консоли – jmesolomon

+0

Метод Run(), прежде чем я исправил его пока я не выйду из VMware автоматически. Но после того, как я исправлю это, сразу после ввода VMware завершает работу. Я не вижу, чтобы мои строки были напечатаны на консоли. –

+0

вы можете добавить 'Console.ReadKey()' сразу после инструкции блока 'if'. который должен держать консоль открытой, пока вы не нажмете клавишу. – jmesolomon

ответ

1

моя программа выходит автоматически ....

Это потому, что у вас есть неконтролируемое исключение в новом выполнения метода во время выполнения и приложение врезаться молча ...

Логика здесь должна быть отлажена и исправлена ​​...

var index = input.IndexOf("echo"); 
var initial = input.Substring(0, index); 
var final = input.Substring(index + "echo".Length); 
var echoInput = initial + final; 
Console.WriteLine(echoInput); 

Проверьте это:

вход

"Эхо мира"

Тогда:

индекс Var = 0

Var начальная = "" // пустая строка

Var окончательное = «эхо» // здесь взрывает с индексом из исключения Bounds, если вы даете только эхо в качестве входных данных

уаг echoInput = „“ + „эхо“

+0

'var final =' part возвращает с ** '' "' ** пустую строку, поэтому я не уверен, как вам удастся получить исключение из-за пределов даже при вводе только ** echo **. может быть, я здесь что-то пропустил .. ^^ – jmesolomon