对于学校作业,我应该创建一个类似ATM的菜单。
我的教授给了我们这段代码:
string choice = null;
do
{
Console.Write("[O]pen Account [I]nquire [D]eposit [W]ithdraw [Q]uit: ");
choice = Console.ReadLine();
choice = choice.ToUpper();
switch (choice)
{
case "O": // open an account
case "I": // inquire
case "D": // deposit
case "W": // withdraw
default: break;
}
} while (choice != "Q");
这是我做的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string choice = null;
string CustomerName;
Console.WriteLine("Welcome to Fantasy Bank");
Console.Write("Please enter your name:");
CustomerName = Console.ReadLine();
do
{
Console.WriteLine("What can I do for you");
Console.Write("[O]pen Account [I]nquire [D]eposit [W]ithdraw [Q]uit: ");
choice = Console.ReadLine();
choice = choice.ToUpper();
double CurrentBalance = 0;
switch (choice)
{
case "O": // open an account
Console.Write("Name of account holder:");
Console.WriteLine(CustomerName);
Console.Write("Initial Deposit:");
CurrentBalance = Convert.ToDouble(Console.ReadLine()); // i get a major error if someone types in a letter instead of a number
Console.Write("You have succesfully opened an account with an initial deposit of ");
Console.Write(CurrentBalance);
Console.WriteLine(" at an imaginary bank. Congratulations");
break;
case "I": // inquire
Console.Write(CustomerName);
Console.WriteLine("'s Bank Account");
Console.WriteLine(CurrentBalance);
break;
我做了一点,但问题从case "I"
开始。 CustomerName
正在被用户输入的内容所取代,就像它应该的那样。但是CurrentBalance
没有改变,我必须将它设置为等于我得到错误。
我开始觉得可能无法更改switch
内的switch
变量。我在我的书中查找了传递引用/值,但在该部分中不包含switch
。
如果你们都能给我一个暗示我做错了什么或者能告诉我什么可以解决我的问题,那就太好了。我不期待你的代码,只是向正确的方向推进。
答案 0 :(得分:5)
您的问题是CurrentBalance
声明的展示位置。
目前你有这个:
do
{
double CurrentBalance = 0;
switch (choice) {
/* the rest of your code */
}
}
应该是
double CurrentBalance = 0;
do
{
switch (choice) {
/* the rest of your code */
}
}
现在,do
循环的下一次迭代不会将CurrentBalance
重置为0
答案 1 :(得分:1)
您重置CurrentBalance
的循环的每次迭代都为0.移动行double CurrentBalance = 0;
:
string choice;
string CurrentName;
double CurrentBalance = 0;
// ...
do
{
// ...
//double CurrentBalance = 0; NOT HERE
switch( ... )
{
}
}
答案 2 :(得分:1)
你应该在进入循环之前初始化所有变量,而不是 in 循环,否则每次迭代都会重新初始化变量(清除为0
)。
double CurrentBalance = 0;
// other code...
do { // ...
我应该提到它与在交换机中更改变量没有任何关系。在交换机内更改变量是完全允许的。