c中while或do/while循环中的Switch语句

c中while或do/while循环中的Switch语句,c,loops,switch-statement,C,Loops,Switch Statement,我是C语言的新手,试图在我的C编程课上为作业制作一个简单的银行系统。我决定在while循环中使用switch语句。该程序在VisualStudio中运行时没有错误消息,但行为异常。以下是作业: 制作一个简单的银行系统。从计划开始,询问储蓄账户的起始余额。从那里,它需要询问应该修改哪个账户:储蓄、支票、贷款和信用。 支票需要设置为250美元。这是支票账户中用来支付账单的钱。 贷款额必须定在9000美元。这是贷款所欠的钱。这是一张账单。 信用额度需要定为500美元。这是信用卡欠款。这是一张账单。 在

我是C语言的新手,试图在我的C编程课上为作业制作一个简单的银行系统。我决定在while循环中使用switch语句。该程序在VisualStudio中运行时没有错误消息,但行为异常。以下是作业:

制作一个简单的银行系统。从计划开始,询问储蓄账户的起始余额。从那里,它需要询问应该修改哪个账户:储蓄、支票、贷款和信用。 支票需要设置为250美元。这是支票账户中用来支付账单的钱。 贷款额必须定在9000美元。这是贷款所欠的钱。这是一张账单。 信用额度需要定为500美元。这是信用卡欠款。这是一张账单。 在询问要修改的帐户后,程序应允许用户在该部分内移动资金。 示例:您正在检查中,是否要支付贷款付款、信用付款、将钱从检查移到储蓄或返回主菜单。 检查是你的中心点。你可以通过支票把钱转移到任何地方,但你不能直接通过储蓄付账

定义\u CRT\u安全\u无\u警告 包括 int mainvoid { 国际储蓄; 整数检查=250; 国际贷款=9000; 积分=500; 国际货币运输公司; 字符选择='y'; 国际服务; 国际事务2; printfWelcome to C-Bank!\n\n; printfw储蓄的当前余额是多少; 扫描%d\n,节省(&S); Printf谢谢您。\n\n; 而choice=='y' { 打印您要管理哪个帐户或账单?\n按“1”可存款,按“2”可检查,按“3”可贷款,按“4”可贷记。否则,按任何其他键退出。; 扫描%d\n\n和服务(&S); 交换机服务 { 案例1: printfWelcome到您的储蓄帐户。您当前的余额是%d。\n,储蓄; 打印请从以下选项中选择:\n您想1存款,2转账到支票,还是3返回主菜单。\n; 扫描%d和服务2; 如果服务2==1 { 打印机定金金额:\n; 扫描%d\n,&moneyMover; 储蓄=储蓄+货币搬运工; printfy您的新余额是:%d\n,储蓄; } 打破 违约: 打破 } 打印是否要选择其他服务?如果是,请按y,否则请按任何其他键。\n; 扫描%c,&choice; } 谢谢你使用银行卡,快回来!; 系统暂停; 返回0; } 程序运行时没有错误消息,但行为怪异。当您输入初始储蓄金额时,在按下“y”键之前,不会发生任何事情,此时它将被激活
显然,跳入while循环,跳过switch语句,并等待您再次选择。或者,如果您输入另一个数字,它将快速显示其余的printf语句并结束程序。其他奇怪的事情也会发生,太多了,实在难以名状。

一个问题就是,例如,这个

scanf("%d\n\n", &service);
尾随的换行符使scanf读取并丢弃任何尾随的空白、换行符、制表符等。。但问题是,scanf需要先看到一个非空白字符,然后才能知道要读取和丢弃的空格的末尾

在scanf格式的字符串中没有任何尾随空格,它很少按预期工作

另一方面,当您使用前导空格来读取和丢弃前导空格(如前一输入中的换行符)时,在读取字符以供选择时,您所做的操作是正确的

另一个问题是,您声明在储蓄输入之后,您将输入“y”。但这不是下一个输入操作所期望的,它期望服务有一个整数

如果输入不是整数,那么

scanf("%d", &service);
将失败,并返回0,您应该真正检查。这也意味着输入中的“y”将留在输入缓冲区中供您选择读取。这就是为什么它似乎跳过了开关

在固定格式字符串中的尾随空格和换行符后,您应该做的第一件事是提供正确的输入。然后可以开始添加错误检查,以确保输入正确


处理可能的错误输入的一种常见方法是使用读取整行,然后使用字符串扫描函数sscanf解析该行。这样,无效输入就不会出现在输入缓冲区中。欢迎使用堆栈溢出。请阅读,采取,阅读,以及。最后,请学习如何创建一个演示给我们看。作为对您的问题的一个可能的猜测,您可能正在阅读一条您意想不到的新行。请记住,您按Enter键结束输入时,它也会作为换行符放入输入缓冲区,供您的程序读取
他。另外,新的堆栈溢出,张贴的代码不编译!除此之外,它还缺少以下语句:include for the function:systemThank。经过一段时间的胡闹,我终于想出了新台词。我不知道我为什么那样做。我以前没做过。谢谢你给我剩下的小费。