使用类型为def struct变量的条件语句时遇到问题

时间:2014-02-22 17:02:46

标签: c struct typedef conditional-statements conditional-operator

我在使用带有def结构变量类型的决策语句时遇到了麻烦, 我也不能在任何地方声明变量等于零。

这是结构

typedef struct{
    int wallet;
    int account;
}MONEY;

它在main中声明为MONEY money;(但是对于函数我有  麻烦* m)

当我尝试做这样的事情时

*m.wallet = *m.wallet - depositAmmount;

或者

*m.wallet = 0;

它给出了一个语法错误,表达式必须具有类类型。 我该怎么办?在函数内部,我尝试声明int *m.wallet = 0;甚至DATE *m.wallet;无效

以下是整个功能

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h>
#include <math.h>
#define clear system("clear") 
#define pause system("pause") 
void banking(MONEY *m){
    int userChoice = 0;
    int withdrawAmmount = 0;
    int depositAmmount = 0;
    do{
        userChoice = 0;
        withdrawAmmount = 0;
        depositAmmount = 0;
        displayBankMenu(*m);
        scanf("%i", &userChoice);
        clear;

        switch (userChoice) {
            case 1:
                    printf("How much would you like to Deposit?: $");
                    scanf("%i", &depositAmmount);
                    if(depositAmmount <= *m.wallet){
                        *m.wallet = *m.wallet - depositAmmount;
                        *m.account = *m.account + depositAmmount;
                    }else{
                        printf("You do not have sufficient funds for this transaction.");
                        pause;
                    }

                    break;
            case 2:                 
                    printf("How much would you like to withdraw?: $");
                    scanf("%i", &withdrawAmmount);
                    if(withdrawAmmount <= *m.account){
                        *m.account = *m.account - withdrawAmmount;
                        *m.wallet = *m.wallet + withdrawAmmount;
                    } else{
                        printf("You do not have sufficient funds for this transaction.");
                        pause;
                    }

                    userChoice = 0;

                    break;
        }
    }while(userChoice != 3);
} //end banking

2 个答案:

答案 0 :(得分:3)

要访问指向结构的指针的成员,请使用->运算符。

m->wallet = m->wallet - depositAmmount;
m->wallet = 0;

.运算符的优先级高于*解除引用的优先级,因此您需要对该表达式使用括​​号来获取结构成员。

(*m).wallet = (*m).wallet - depositAmmount;
(*m).wallet = 0;

答案 1 :(得分:2)

结构成员运算符.的优先级高于解除引用运算符*。所以下面的陈述

*m.wallet = 0;

相同
*(m.wallet) = 0;

这意味着获取结构wallet的成员m,然后取消引用它,假设它是一个指针。但m是指向结构的指针,而不是结构本身。因此,您应首先取消引用指针以获取结构,然后使用.运算符来获取wallet成员。

(*m).wallet = 0;

您还可以使用更方便的箭头操作符->作为

m->wallet = 0;

他们是一样的。