2012-10-27 67 views
4

嘿傢伙我需要幫助我的程序,我正在做,我已經有了一切想通了,但一個。命令行變量/字符串

我的代碼看起來是這樣的,但我已經縮短了一點......

public static void mainvoid() 
{ 
    string line = Console.ReadLine().ToLower(); 
    if (line == "restart") 
    { 
     Console.Clear(); 
     Main(); 
    } 
    if (line == "enter a value: ") 
    { 
     string value = console.ReadLine(); 
     console.writeline("Your value is {0}", value); 
     mainvoid(); 
    } 
    if (line == "my name") 
    { 
     Console.WriteLine("Your name is {0}",  ConsoleApplication1.Properties.Settings.Default.name); 
     mainvoid(); 
    } 

我想我的程序拿起一個命令(女巫我已經做了...),其中一些後面有值/字符串例如 通過我使用C#2010 的方式,我希望我的命令看起來像這樣

我的名字是丹尼爾
等字符串/值=丹尼爾 或
名=比利 因此字符串/價值=比利

所以我想它通過console.readline();並挑出它正在改變名稱,之後將是它將被改爲的名稱。

但我不知道如何使最後一位的值/串,我也可以用... 請發表評論,如果你能幫助我:)

+4

不會與想要的不同。請正確。 – nawfal

+2

謝謝各有不同... –

+2

@nawfal StackOverflow是一個開放的平臺,就像維基,你可以很容易地編輯某人的問題來解決拼寫錯誤,而不是留下無用的評論。看到http://stackoverflow.com/faq#editing – MattDavey

回答

0

我可以看到這裏有兩個問題,一個是從「我的名字是xyz「命令,另一個是在程序中稍後保存該值。

由於您構建mainmethod的方式以及它自己調用它的事實(這稱爲遞歸),因此它不能將任何變量從一個調用共享到下一個調用。這使得不可能存儲人名。您可以通過在mainmethod

static public void Main() 
{ 
    string currentLine; 

    do 
    { 
     currentLine = Console.ReadLine(); 
    } 
    while (!currentLine.Equals("exit")) 
} 

這不是創建一個循環將繼續允許用戶輸入命令消除遞歸,當用戶輸入「退出」該程序將終止。

現在到存儲的用戶名的問題,你可以簡單地刪除「我的名字是」之句,以獲得用戶名的一部分......

static public void Main() 
{ 
    string username = "Matthew"; 

    string currentLine; 

    do 
    { 
     currentLine = Console.ReadLine(); 

     if (currentLine.Equals("restart")) 
     { 
      Console.Clear(); 
     } 

     if (currentLine.StartsWith("my name is")) 
     { 
      username = currentLine.Replace("my name is ", ""); 
     } 

     if (currentLine.Equals("my name")) 
     { 
      Console.WriteLine("Your name is {0}", username); 
     } 
    } 
    while (!currentLine.Equals("exit")) 
} 

我希望讓你感動!

+0

感謝你的配合馬特在新項目的測試中效果很好,現在試着把它放到我的主項目中:D –

0

如果你不想通過Console.ReadLine()拿起命令用Console.ReadKey(true)挑選它。你的文字不會改變。

這裏是例子:

ConsoleKeyInfo ck = Console.ReadKey(true); 
if(ck.Key == Keys.Space){ 
//do something 
} 

我不明白你很好,但我會盡力的猜測:)

如果你想以檢索名稱,你可以這樣寫:

Console.Write("Your name is "); 
string name = Console.ReadLine(); 
+0

我不會讓命令產生一個值後,例如:鮑勃 –

+0

傑西詹姆斯,我知道那個代碼,但我不喜歡這樣的...我不會在代碼的同一行,例如MYNAME =詹姆斯和詹姆斯將是字符串... –

1

您可能需要提出自己的語法。

對於如我選擇像下面

<Command Name>:Parameters  
ChangeName:Daniel 

然後有一個枚舉來定義你的命令

enum Command 
{ 
     ChangeName 
} 

//現在我們可以解析命令,並採取必要的行動語法

//Split the string 
String[] inputs= Console.ReadLine().Split(":");//"ChangeName:Bob" 

//Generate the enumeration type from the input command 
var cmd = (Command) Enum.Parse(typeof(Command), inputs[0] , false); 

if(cmd == Command.ChangeName) 
{ 
//Process the parameters in inputs[1] 
} 
+0

你認爲這有點過分複雜嗎? – MattDavey

+0

@Matt:枚舉? :) –

+0

是啊..我可以看到這是一個很好的可擴展的解決方案,我可能會做類似的事情,但OP顯然是C#的新手,所以我只是想知道它是否會對他有點過分。 – MattDavey