我目前正在使用C#试验Stacks。我已经创建了这个小测试程序来推送,弹出和查看堆栈:
Stack st = new Stack();
Console.WriteLine("Add item to Stack");
int inp = Convert.ToInt32(Console.ReadLine());
st.Push(inp);
ty:
Console.WriteLine("");
Console.WriteLine("A to Add");
Console.WriteLine("D to Pop");
Console.WriteLine("V to View");
char act = Console.ReadKey().KeyChar;
switch (act)
{
case 'A':
Add(st);
break;
case 'D':
Remove(st);
break;
case 'V':
View(st);
break;
default:
Console.WriteLine("Not an valid option");
break;
}
goto ty;
然而,当我尝试为决策部分输入一个角色时,这会立即导致它在同一行上重复:
问题是,为什么会发生这种情况;我是否正确使用Console.WriteLine?
答案 0 :(得分:2)
您当前问题的答案是在Console.ReadKey()
之后您没有打印空行。因此,无论程序写入下一个控制台的程序都在同一行。
话虽如此,这段代码有很多不好的做法。
首先,我摆脱了goto
。使用goto
时的一个好的经验法则是“#34;永远"”。说真的,我怀疑会有一种情况,你别无选择,只能使用goto
,如果你发现自己处于这样的境地,那么你可能做错了。说实话,你可以在某些情况下证明使用它,但至少在这种情况下它并不是真的有必要。请read more here。
其次,你没有办法退出你的循环而不是强迫你的程序关闭Ctrl+C
,这不是一个好的终止方式。就个人而言,我重构你的代码,所以输入/显示/操作被分成他们自己的方法,如下所示:
static void Main(string[] args)
{
Stack st = new Stack();
Add(st);
StackOperation(st);
}
static void StackOperation(Stack st)
{
string act = string.Empty;
while (act != "Q")
{
act = DisplayPrompt();
switch (act)
{
case "A":
Add(st);
break;
case "D":
Remove(st);
break;
case "V":
View(st);
break;
case "Q":
break;
default:
Console.WriteLine("Not a valid option");
break;
}
}
}
static string DisplayPrompt()
{
Console.WriteLine();
Console.WriteLine("A to Add");
Console.WriteLine("D to Pop");
Console.WriteLine("V to View");
Console.WriteLine("Q to Quit");
var act = Console.ReadKey().KeyChar;
Console.WriteLine();
return act.ToString();
}
static void Add(Stack st)
{
Console.Write("Input item to add to stack: ");
int inp = Convert.ToInt32(Console.ReadLine());
st.Push(inp);
}
static void Remove(Stack st) { Console.WriteLine("Delete item from Stack"); }
static void View(Stack st) { Console.WriteLine("View Stack"); }
显然,这只是如何重构的一个非常粗略的想法,你应该把它作为指导而不是成品。
答案 1 :(得分:0)
您可以将读取操作更改为:
Console.ReadKey(True)