2017-06-26 33 views
-1
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Menu_Attempts 
{ 
    class Program 
    { 
     static void Main(string[] args) 

     { 
      bool forever = true; 
      do 
      { 
       Console.WriteLine("1. Stone to Pounds"); 
       Console.WriteLine("2. Quit"); 

       int reply = Convert.ToInt32(Console.ReadLine()); 
       switch (reply) 
       { 
        case 1: 
         Console.WriteLine("Enter an amount in Stone"); 
         double UserInput = double.Parse(Console.ReadLine()); 
         StoneToPounds(UserInput); 

         break; 
        case 2: 
         Console.WriteLine("You've decided to quit."); 
         forever = false; 

         break; 

       } 
      } while (forever); 

     } 

     public static double StoneToPounds(double number) 
     { 
      double answer = number * 14; 
      return answer; 
     } 

    } 
} 

所以我试图做一个基于控制台的菜单,并在需要时调用方法来清理它。我选择选项1.将石头转换为磅,它给了我一个输入数字的选项。但是,当我这样做时,只是回到菜单的乞讨?C#在switch语句中没有被调用的方法?

+5

您从不输出/写入StoneToPounds()的结果... –

+6

你没有对StoneToPounds的返回值做任何事情。它会被调用,你只是没有看到它的任何输出,你的while while循环然后再次按预期启动 – Thewads

+0

'Console.WriteLine(StoneToPounds(UserInput));'? –

回答

2

是的,您的方法正在调用(并且您可以通过添加断点来证明),但实际上并没有对StoneToPounds方法的结果做任何事情。也许你可以做这样的事情:

case 1: 
    Console.WriteLine("Enter an amount in Stone"); 
    double UserInput = double.Parse(Console.ReadLine()); 
    Console.WriteLine("The result is {0}", StoneToPounds(UserInput)); 
    break; 

你会看到,很快就好了,你只要用户输入文本或任何超过若干不同的代码将打破;我建议看看TryParse方法

0

方法很好。你只是不打印答案。改变这样的代码来打印答案:

case 1: 
    Console.WriteLine("Enter an amount in Stone"); 
    double UserInput = double.Parse(Console.ReadLine()); 
    double result = StoneToPounds(UserInput); 
    Console.WriteLine(result.ToString()); 

    break; 
+0

Yup刚刚注意到,你的答案比我如何解决它要好得多。干杯! –

0

你可以只是简单地调用break之前添加此行代码:

Console.WriteLine("The result is {0}", StoneToPounds(UserInput)); 
Console.WriteLine("Press any key to continue"); 
Console.ReadKey(); 
-1

为别人说......你方法被调用和返回双值...但你没有保存任何类型的变量,如果你不想让你的方法对变量本身进行操作,你可以通过这种方式将它作为参数传递,这样任何变化都会发生在你的方法里面的变量中影响全球变量

public static void StoneToPounds(ref double number) 
    { 
     number *= 14 
    } 

btw操作符* =可以消除您对单独函数的需要,如果您是初学者,那么现在您应该知道,只要您能保持整洁和有组织,代码总是更好:D

+1

该方法已经返回值,这里不需要通过在这里添加'ref'来使事情复杂化。 – juharr

+0

“少代码总是更好”,这是不正确的! –

+0

答案的目的是分享知识并启发他C#有这样一种选择,以防他有一天需要它,技术上根本没有必要使用方法..但是伙计仍然在学习,我们应该尽力帮助他只要与同一主题相关的信息不在高级水平 –