基本上我有一些问题。
我想解决的问题涉及一个"银行业务计划"从文本文件中获取其信息。它读取前五行代码(都是浮点数)并将每一行用作起始余额。
接下来,以下1-5行代码每个都以一个字符开头,表示它影响的帐户。接下来是单个字母,表示撤回或存款等。之后是将在行动中使用的金额。我必须使用多种功能。
这是我到目前为止所知道的,我知道在我工作的时候,有些空格已经留下了伪代码。
float balance();
float withdraw();
float deposit();
float update();
#define INTEREST 3.5;
int main(){
//initializing variables
int count =0,count2=0,acctNum=1,acct1,acct2,acct3,acct4,acct5,i=0;
float orgBalance, balance;
char activity,B,W,U,D;
//opening files
FILE *input;
input = fopen("bankfile.txt","r");
//error checking that file opened correctly
if (input == NULL){
fprintf(stderr, "Can't open input file!\n");
exit(1);
}
printf("Account Balance\n");
printf("------------------------\n");
while(count<5){
fscanf(input,"%f",&orgBalance);
//printf("%d %.2f\n",acctNum,orgBalance);
//acctNum++;
i++;
count++;
printf("%d balance is %.2f\n",i,orgBalance);
}
printf("------------------------\n");
while(fscanf(input, "%d ",&i)!=EOF){
//while(count2<5)
fgetc(i);
switch (activity){
case 'B':
balance;
;
break;
case 'W':
withdraw;
;
break;
case 'D':
deposit;
;
break;
case'U':
update;
;
break;
}
count2++;
}
system("pause");
return 0;
}
float balance(){
float bal;
return bal;
}
float withdraw(){
float bal1, bal2;
if(bal1>bal2){
return bal1 - bal2;
}
else{
printf("Sorry, you can't withdraw that much");
return bal1;
}
}
float deposit(){
float bal1,bal2;
return bal1 += bal2;
}
float update(){
float bal;
return bal*= INTEREST;
}
答案 0 :(得分:1)
这些都是错误的
switch (activity){
case 'B':
balance;
;
...
你的意思是switch (activity){
case 'B':
balance(); <<<======
;
答案 1 :(得分:0)
您可以使用数组提取这样的帐户:
float ogAcnts[5] = {0,0,0,0,0}; // original account balances initialized to zero
fscanf(input, "%f%f%f%f%f", &ogAcnts[0], &ogAcnts[1], &ogAcnts[2], &ogAcnts[3], &ogAcnts[4]);
如果您需要保留原始余额以供将来参考,您可以拥有包含新余额的第二个数组:
float newAcnts[5] = {0,0,0,0,0}; // initialized to zero, could also be replaced with the original balances
显示原始帐户余额:
// you can fill in the rest
for(int i=0; i<=4; i++)
{
printf("%d balance is %.2f\n",i,ogAcnts[i]);
}
您可以在扫描时跳过文件中的帐户余额,如下所示:
fscanf(input+5, %d%c%f, &acountNum, &transactionType, &amount); // note these variables don't exist in your code but it's an example of how you could use them
然后,您可以按照相同的方法获取剩余的交易。获取事务参数并对其进行操作。使用阵列访问余额而不是文件。第一个帐户将是元素0,并以帐号5结尾,在索引4中(基于零)。所以你必须遵循这种模式。我这说是因为交易用账号标记(从0或1开始)。如果您使用的是零,则可以更轻松地访问阵列中的帐户余额。像这个例子&#34; 2 W 200&#34;如果帐户#2中有400,并且您开始使用第一个帐户为帐户0,则可以将帐号和金额传递给您的交易功能,如下所示:
...
newAcnts[accountNum] = ogAcnts[accountNum]-amount; // withdraw example using the variables from above
注意:每个帐户只有一个运行余额可能会更好,除非(如上所述)您需要知道它在开始之前是什么。因为对于同一帐户中的任何其他交易,您希望使用newAcnts [accountNum]来获得帐户的正确余额。或者在开始任何事务之前将原始余额复制到新帐户数组中,并仅在newAcnts数组上执行事务。希望这是有道理的:)
newAcnts[accountNum] = newAcnts[accountNum]-amount; // withdraw example