我想知道如何从另一个方法调用字符串输入

时间:2017-07-21 00:01:22

标签: c#

我是c#的新手,我试图在控制台应用程序中制作文字游戏。我做了一个例子的代码,因为我想知道如何从另一个方法调用字符串输入

class Program
{
    static void Main(string[] args)
    {
        b();
    }

    public static void b()
    {
        stops();
        c();
    }

    public static string stops ()
    {
        string stop = Console.ReadLine();
        //here i get the user input
        Console.WriteLine(stop);
        return stop;
    }

    public static void c()
    {
        string stop = stops();

        Console.WriteLine("i need this:" + stop);
        // here i want the user input
        Console.ReadLine();
    }
}

在这种情况下,我没有在控制台中收到用户输入stop

我想在游戏中保留用户名,但我使用了很多方法。在一种方法中,我问用户他的名字,但我不能在另一种方法中使用他的字符串。 现在我试图简化我的问题,在下一个示例中,控制台应用程序不会在此处打印Console.WriteLine("your name is: " + name);此输入string name = Console.ReadLine();

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("what is your name:");
        userName();
        string name = userName();
        Console.WriteLine("your name is: " + name);
        Console.ReadLine();
    }

    public static string userName ()
    {         
        string name = Console.ReadLine();
        return name;        
    }
}

3 个答案:

答案 0 :(得分:1)

简单示例中的问题是您正在调用该方法两次 - 第一次没有捕获输出时,第二次调用输出。如果您只是删除对userName()的第一次调用,那么您的代码应该可以正常运行。

这是一个修改过的例子:

static void Main()
{
    string name = GetUserName();
    Console.WriteLine("Hello, " + name + ". Nice to meet you!");
    Console.ReadKey();
}

public static string GetUserName()
{
    Console.Write("Please enter your name: ");
    string name = Console.ReadLine();
    return name;
}

<强>输出

enter image description here

现在,如果要在整个程序中使用userName,可以考虑将其设置为类级变量。这意味着您的类中的所有方法都可以访问它。

另请注意,现在您不必捕获GetUserName方法的输出,因为它将设置您已有权访问的变量。我们只需致电GetUserName,然后GreetUser方法就可以访问它了:

// Variable set at this scope will be accessible to the whole class
private static string userName;

static void Main()
{
    GetUserName();
    GreetUser();

    Console.ReadKey();
}

public static void GetUserName()
{
    Console.Write("Please enter your name: ");
    userName = Console.ReadLine();
}

public static void GreetUser()
{
    Console.WriteLine("Hello, " + userName + ". Nice to meet you!");
}

答案 1 :(得分:0)

我认为您已经在代码中回答了自己的问题。

在这种情况下,当你有stop()返回用户输入时,c()再次调用stops(),这将再次请求用户输入。根据您的问题,您希望从另一个方法中获取字符串输入,您已经在c()中执行了该操作。如果您只想询问用户输入一次,则可以删除b()方法中的stops()方法。

class Program
{
        static void Main(string[] args)
        {
             Init();
        }

        public static void Init()
        {
             AskUserInput();
        }

        public static string stops()
        {
             string stop = Console.ReadLine();
             //here i get the user input
             Console.WriteLine(stop);
             return stop;
        }

        public static void AskUserInput()
        {
             string stop = stops();
             Console.WriteLine("i need this:" + stop);                 
        }
 }

另外,正如Rob所说,用正确的名称命名方法是一种很好的做法。随后您开始处理大型项目时,这将对您有所帮助。

我还删除了最后一个Console.ReadLine,因为我不确定它是做什么的。

答案 2 :(得分:0)

我相信您编辑问题后的代码只需略微更改即可。您不必调用方法userName()两次。程序第一次等待输入是从未将返回值分配给任何变量时开始的。然后它再次等待输入,并且存储de变量并给你一个输出。

您只需要在字符串名称之前注释该行...

以下是您的代码:fiddle