有没有办法在一个操作中将用户输入存储在交换机案例中,并在运行时跨交换机操作使用它。
示例:如果它是银行的软件,我想从用户那里获取信息并验证他的账号是否正确,还要检查他是否有足够的银行余额来取款
我需要知道如何存储一个操作的值,以便我可以将它用于进一步的操作。
switch(ops)
{
char ac_no;
long amt,amt2,init_dep;
char name,ac_allocated;
case OpenAC:
{
printf("1.Name:\n");
scanf("%s",&name);
printf("2.A/Cno_allocated:\n");
scanf("%s",&ac_allocated);
printf("3.Initial deposit:\n");
scanf("%d",&init_dep);
break;
}
case Deposit:
{
printf("Enter the a/c number: ");
scanf("%s",&ac_no);
printf("Amount:Rs. ");
scanf("%ld",&amt);
break;
}
case Withdraw:
{
printf("Enter the a/c number: ");
scanf("%s",&ac_no);
printf("Amount:Rs. ");
scanf("%ld",&amt2);
{printf("Cannot withdraw.Rs.500 minimum balance mandatory.\n");}
break;
}
return ops;
}
我还尝试在switch(ops)中声明变量以将值存储在其中(如下例所示,以便在下一步中验证a / c号,但它没有帮助。)
已编辑的代码:
`
char ac_no;
long amt,amt2,init_dep,dep1;
char name,ac_allocated,ac1;
case OpenAC:
{
printf("1.Name:\n");
scanf("%s",&name);
printf("2.A/Cno_allocated:\n");
scanf("%s",&ac_allocated);
ac_allocated = ac1;
printf("3.Initial deposit:\n");
scanf("%d",&init_dep);
init_dep = dep1;
//break;
}
case Deposit:
{
printf("Enter the a/c number: ");
scanf("%s",&ac_no);
if(ac_no == ac1)
{
printf("Amount:Rs. ");
scanf("%ld",&amt);
}
break;
`
答案 0 :(得分:7)
为什么不在交换机外声明变量。您甚至可以在开关周围放置大括号以防止变量泄漏到周围的函数,如下所示:
// code from the surrounding function
{
char ac_no;
long amt,amt2,init_dep;
char name,ac_allocated;
switch(ops)
{
case OpenAC:
...
}
} // end of block
答案 1 :(得分:3)
我不确定我是否理解你的问题,但是如果你在switch语句的大括号内声明了某些东西,那么当你点击结束的大括号时它将超出范围而在下次switch语句时不可用遇到。
答案 2 :(得分:2)
第一个问题:你为ac_no,name,ac_allocated和ac1使用了错误的类型。您显然希望在这些位置存储字符串,因此您需要声明char:
的数组,而不是普通的char
。
char ac_no[AC_NO_SIZE];
char name[NAME_SIZE];
char ac_allocated[AC_ALLOCATED_SIZE];
char ac1[AC1_SIZE];
其中每个*_SIZE
足够大以容纳输入数据加上0终止符的1个额外字符。 IOW,如果您的帐号长度最多为10个字符,则AC_NO_SIZE必须为11.
第二个问题: not 在switch语句的开头声明变量;任何初始化都将被跳过。
第三个问题:在特定范围内声明的自动变量在该范围之外是不可用的;当该范围退出时,它们将不复存在。您声明的变量都不会在switch语句之外可用。
第四个问题:如果此开关操作在函数内部,并且您希望在函数调用之间保留这些值,则可以执行以下三个操作之一:
char ac_no[AC_NO_SIZE];
char name[NAME_SIZE];
char ac_allocated[AC_ALLOCATED_SIZE];
char ac1[AC1_SIZE];
long amt, amt2, init_dep;
void foo()
{
int ops;
...
ops = bar(ops);
...
}
int bar(int ops)
{
switch(ops)
{
case OpenAC:
printf("Name: ");
fflush(stdout);
scanf("%s", name); // note no &; true for all char [] types
printf("A/C no allocated: ");
fflush(stdout);
scanf("%s", ac_allocated);
printf("Initial deposit: ");
fflush(stdout);
scanf("%ld", &init_dep);
...
}
return ops;
...
int bar(int ops)
{
static char ac_no[AC_NO_SIZE];
static char name[NAME_SIZE];
static char ac_allocated[AC_ALLOCATED_SIZE];
static char ac1[AC1_SIZE];
static long amt, amt2, init_dep;
switch(ops)
{
case OpenAC:
printf("Name: ");
fflush(stdout);
scanf("%s", name);
printf("A/C no allocated: ");
fflush(stdout);
scanf("%s", ac_allocated);
printf("Initial deposit: ");
fflush(stdout);
scanf("%ld", &init_dep);
...
}
return ops;
}
int foo(int ops,
char *ac_no,
char *name,
char *ac_allocated,
char *ac1,
long *amt, // Since these values are being modified in the function,
long *amt2, // we must pass pointers to them, otherwise the changes
long *init_dep) // will not be reflected in the calling function
{
switch(ops)
{
case OpenAC:
printf("Name: ");
fflush(stdout);
scanf("%s", name); // no & before name; same is true for rest of parameters
printf("A/C no allocated: ");
fflush(stdout);
scanf("%s", ac_allocated);
printf("Initial deposit: ");
fflush(stdout);
scanf("%ld", init_dep); // no & before init_dep since it's already a pointer
...
所有这些都假设我正确理解你的问题。
答案 3 :(得分:0)
也许您应该使用结构来保存帐户数据和功能,以使其可读和可维护。
struct account_s { /* Fields borrowed to @John Bode */
char ac_no[AC_NO_SIZE];
char name[NAME_SIZE];
char ac_allocated[AC_ALLOCATED_SIZE];
char ac1[AC1_SIZE];
long amt, amt2, init_dep;
};
int openAC(struct account_s *account);
继续......:)