从C中的文件读入的行中获取多个单独的输入

时间:2015-03-13 20:03:12

标签: c function

基本上我有一些问题。

我想解决的问题涉及一个"银行业务计划"从文本文件中获取其信息。它读取前五行代码(都是浮点数)并将每一行用作起始余额。

接下来,以下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;

}

2 个答案:

答案 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