我是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;
}
}
答案 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;
}
<强>输出强>
现在,如果要在整个程序中使用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