2016-10-26 33 views
1

我正在使用宇宙做一個簡單的操作系統。 我是c#的初學者。 cosmos默認代碼中的Run()方法循環直到我退出VMware。但是,一旦我修好了一點,我的程序就會自動退出。我不明白爲什麼。我試圖讓它循環。 科斯莫的默認代碼之前,我修正:c#運行方法不循環

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

馬可福音嗨,你是什麼意思試圖讓它循環?你到了可以輸入輸入的地步嗎?你是什​​麼意思**我的代碼自動退出**所以如果你輸入** _ echo這是測試_ **你應該看到** _這是測試_ **在我修復之前在控制檯上打印出 – jmesolomon

+0

Run()方法直到我自動退出VMware。但是在我修復之後,只要我輸入,VMware就會退出。我沒有看到我的字符串打印在控制檯上。 –

+0

你可以在'if'語句之後添加'Console.ReadKey()'。這應該保持控制檯打開,直到你點擊一個鍵。 – 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); 

檢查了這一點:

輸入

「回波世界」

然後:

瓦爾索引= 0

瓦爾初始= 「」 //空字符串

瓦爾最終=「回聲」 //用索引越界異常這裏爆炸,如果你只給回聲作爲輸入

VAR echoInput =‘’+‘回聲’

+0

var final ='部分用**'「」**返回''空字符串,所以我不確定你是如何設法得到一個索引超出界限的異常,即使只輸入** echo **。也許我在這裏錯過了一些東西.. ^^ – jmesolomon