2014-09-06 172 views
1

我想用goto語句去我的代碼中的某處,但它不會跳過我的代碼的一部分,但會繼續讀取。 我只需要跳過我不需要的部分... 代碼:c#我該如何結束我的GOTO語句並繼續

int getal1, getal2; 
     int som,verschil,product,quotient; 


     Console.WriteLine("first number: "); 
     Console.ForegroundColor = ConsoleColor.Green; 
     getal1 = Convert.ToInt32(Console.ReadLine()); 
     Console.ResetColor(); 
     Console.WriteLine("choose operator: -,+,*,/"); 
     if (Console.ReadLine() == "+") 
     { 
      goto second; 
     } 
     else if (Console.ReadLine() == "-") 
     { 
      goto second1; 
     } 

second: 
      Console.WriteLine("Second number(+): "); 
      Console.ForegroundColor = ConsoleColor.Green; 
      getal2 = Convert.ToInt32(Console.ReadLine()); 
      Console.ResetColor(); 
      goto Operat; 

Operat:  som = getal1 + getal2; 
      verschil = getal1 - getal2; 
      product = getal1 * getal2; 
      quotient = getal1/getal2; 
      goto optelling; 

second1: Console.WriteLine("Second number(-): "); 
      Console.ForegroundColor = ConsoleColor.Green; 
      getal2 = Convert.ToInt32(Console.ReadLine()); 
      Console.ResetColor(); 
      goto Operat1; 

Operat1: 
      som = getal1 + getal2; 
      verschil = getal1 - getal2; 
      product = getal1 * getal2; 
      quotient = getal1/getal2; 
      goto verschil; 

optelling: 
      Console.Write("De som van "); 
      Console.ForegroundColor = ConsoleColor.Green; 
      Console.Write(getal1.ToString()); 
      Console.ResetColor(); 
      Console.Write(" en "); 
      Console.ForegroundColor = ConsoleColor.Green; 
      Console.Write(getal2.ToString()); 
      Console.ResetColor(); 
      Console.Write(" is "); 
      Console.ForegroundColor = ConsoleColor.Yellow; 
      Console.WriteLine(som.ToString()); 
      Console.ResetColor(); 
      goto end; 


verschil: 
      Console.WriteLine("Het verschil van " + getal1.ToString() + " en " + getal2.ToString() + " is " + verschil.ToString()); 
goto end; 

product:   
      Console.WriteLine("Het product van " + getal1.ToString() + " en " + getal2.ToString() + " is " + product.ToString()); 
quotient:    
      Console.WriteLine("Het quotient van " + getal1.ToString() + " en " + getal2.ToString() + " is " + quotient.ToString()); 

end: 
      Console.WriteLine(); 
      Console.ForegroundColor = ConsoleColor.White; 
      Console.WriteLine("Press Enter to continue..."); 
      Console.ResetColor(); 

      Console.readkey(); 

只要複製粘貼此代碼,並幫助我的這個!

+0

它在荷蘭有點和「索姆」有點不同,因爲我用顏色測試。 – Thibaut 2014-09-06 14:50:53

+7

至少在1968年以來,在所有地方使用「goto」被認爲是非常糟糕的風格[後藤被認爲是有害的](http://www.u.arizona.edu/~rubinson/copyright_violations/Go_To_Considered_Harmful.html) – 2014-09-06 14:54:41

+7

我在想有一段時間,如果這是一種玩笑 - 但如果你是認真的:請不要使用'goto' **永遠** – Carsten 2014-09-06 14:55:00

回答

13

根本這裏的問題是,你是天真地翻譯一個批處理文件到C#,而不是想着批處理文件做什麼,寫在C#中做同樣的事情的程序,使用風格和C#約定。

具體這裏的問題不是你的goto使用,而是每次調用Console.ReadLine讀取另一行。當你說:

if (Console.ReadLine() == "+") 
    { 
     goto second; 
    } 
    else if (Console.ReadLine() == "-") 
    { 
     goto second1; 
    } 

這意味着「如果當前行不+然後檢查是否下一個行是-」。你的意思是說

var line = Console.ReadLine(); 
    if (line == "+") 
    { 
     goto second; 
    } 
    else if (line == "-") 
    { 
     goto second1; 
    } 

而在你的程序後,你正確地調用Console.ReadLine讀下一行。記住,時間你在你的程序中調用Console.ReadLine你正在指示控制檯讀下一行而不是重新讀取當前行。你似乎有時希望它意味着一件事而另一件事。

+0

好的謝謝隊友,我也很新! – Thibaut 2014-09-06 21:06:48

+0

@ user2855957:不客氣。如果您認爲答案能夠解決您的問題,請將其標記爲「已接受」。這樣,閱讀這個問題的其他人就會知道它已經被回答了。 – 2014-09-10 15:34:03