C程序为何跳过if语句?scanf使用问题新手求助
帮你解决代码的异常问题
嘿,别慌!我一眼就看到几个关键错误,这些就是导致你的代码跳过if语句、行为异常的原因,咱们一个个来理清楚:
1. 混淆了赋值运算符=和比较运算符==
这是编程新手最容易踩的坑之一!你写的if(i=F)和if(i=W)其实是赋值操作,不是判断相等:
i=F是把未初始化的变量F的随机垃圾值赋给i,这个表达式的结果就是这个垃圾值,直接导致你的if判断完全失效。- 正确的写法应该用**双等号
==**来比较输入的字符和字符常量,而且字符常量必须加单引号,比如if(i == 'F')、if(i == 'W')。
另外你声明的W、F、A这些变量根本没用到,反而会造成混淆,直接删掉就行,咱们直接用字符常量来判断。
2. 多余的分号让条件判断失效
你写的if(b<0);后面多了个分号,这意味着这个if语句的主体是空的,后面的{ printf("The balance must be maintained above zero!\n"); }会无条件执行,不管b是不是小于0,这就导致每次循环都会弹出错误提示,完全不符合你的逻辑。把那个多余的分号删掉就好了。
3. scanf格式符和变量类型不匹配
你声明的d是double类型,但用了scanf(" %f", &d);,%f是给float类型用的,double对应的格式符是%lf,不匹配会导致输入的金额读取错误,进而影响余额计算。
修正后的完整代码
#include <stdio.h> int main(){ printf("BANK ACCOUNT PROGRAM!\n--------------------\n"); char i; int t = 1; double b, d; while (t == 1){ // 把赋值改成比较,避免逻辑歧义(也可以直接用while(1)) printf("Enter the old balance:\n"); scanf(" %lf", &b); printf(" %lf\n", b); // 加换行让输出更清晰 if(b >= 0) { printf("Enter the transactions now!\n Enter an F for the transaction type when you are finished.\n"); printf("Transaction Type (D=deposit, W=withdrawal, F=finished):\n"); scanf(" %c", &i); if(i == 'F'){ printf("Your ending balance is: %lf\n", b); printf("Program is ending!\n"); return 0; } if(i == 'W'){ printf("Amount: "); scanf(" %lf", &d); b = b - d; printf("Updated balance: %lf\n", b); } if(i == 'D'){ // 补上你漏掉的存款逻辑 printf("Amount: "); scanf(" %lf", &d); b = b + d; printf("Updated balance: %lf\n", b); } } else { // 用else替代冗余的if判断,逻辑更清晰 printf("The balance must be maintained above zero!\n"); } } return 0; }
我还帮你补上了存款(D)的逻辑,原来的代码里只处理了取款,同时调整了输出格式,让信息更易读。
内容的提问来源于stack exchange,提问作者Daniel Thoman
相关产品推荐
相关产品推荐

