首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >条件语句,以验证事务模块(.cpp)报头中的#define(d)整数提供的范围。

条件语句,以验证事务模块(.cpp)报头中的#define(d)整数提供的范围。
EN

Stack Overflow用户
提问于 2016-05-27 15:24:38
回答 2查看 100关注 0票数 0

第一次在堆栈溢出上发布。我不确定这个问题是否足够清楚,所以我将尝试解释这个问题,并提供我的代码。

我猜我的问题是与我在标题中提到的成员函数的定义中创建的条件if语句有关的问题。报头具有#define语句,其整数值为MIN,最大值用于整数变量,这些变量将从用户的输入中接受。我似乎无法验证输入的数字。我已经使用条件语句之前和之后发出的校验值进行了测试,不管输入了什么,它们似乎都是经过验证的。我在一个if声明中也包含了所有的条件,如果这有什么区别的话。

下面是一个简单会计应用程序的代码,它包含报头和事务(.cpp)模块和main.cpp:

// BTP200讲习班2:复合类型和隐私MAIN.CPP

代码语言:javascript
复制
#include <iostream>
#include "AccountNumber.hpp"

using namespace std;
using namespace sict;

int main()
{
    AccountNumber myNumber;
    char name[41];
    int bankCode;
    int branchCode;
    int accNumber;

    cout << "Bank account app" << endl <<
    "===================" << endl << endl;
    cout << "Please enter your name: ";
    cin >> name;
    myNumber.setName(name);
    cout << "please enter your bank account, branch code" <<
    ", and account number as follows:" << endl << "999 999 99999: ";

    do
    {
        cin >> bankCode >> branchCode >> accNumber;
        myNumber.setAccountNumber(bankCode, branchCode, accNumber);
        myNumber.display();
    } while(!myNumber.isValid() && cout << "Invalid account number, (999 999 99999), try again: ");

    cout << "Thank you!" << endl;

    return 0;
}

ACCOUNTNUMBER.CPP

#include <iostream>
#include <cstring>
#include "AccountNumber.hpp"

#define MAX_NAME_LENGTH 40
#define MIN_BANKCODE    100
#define MAX_BANKCODE    999
#define MIN_BRANCHCODE  1
#define MAX_BRANCHCODE  220
#define MIN_ACCNO       10000
#define MAX_ACCNO       99999

using namespace std;

namespace sict
{
    void AccountNumber::setName(const char n[])
    {
        strcpy(name, n);
    };

    void AccountNumber::setAccountNumber(int bankc, int branchc, int an)
    {
        validAccNumber = false;

        int bankc_v=0, branchc_v=0, an_v=0;

        cout << bankc_v << branchc_v << an_v; //TESTING

        if (bankc >= MIN_BANKCODE || bankc <= MAX_BANKCODE)
        {
            bankCode = bankc;
            bankc_v=1;
        }
        else if (branchc >= MIN_BRANCHCODE || branchc <= MAX_BRANCHCODE)
        {
            branchCode = branchc;
            branchc_v=1;
        }
        else if (an_v >= MIN_ACCNO || an_v <= MAX_ACCNO)
        {
            accountNumber = an;
            an_v=1;
        }

        cout << bankc_v << branchc_v << an_v; //TESTING



        else if(bankc_v==1 && branchc_v==1 && an_v==1)
        {
            validAccNumber = true;
        }
    }

    void AccountNumber::display() const
    {
        if(isValid() == 1)
        {
            cout << "Name: " << name << ", Account number: " << bankCode << "-"
            << branchCode << "-" << accountNumber << endl;
        }
        else
        {
            cout << name << " does not have a valid account number." << endl;
        }
    }

    bool AccountNumber::isValid() const
    {
        return AccountNumber::validAccNumber;
    }   
}

ACCOUNTNUMBER.HPP

#ifndef AccountNumber_hpp
#define AccountNumber_hpp

#include <stdio.h>

#define MAX_NAME_LENGTH 40
#define MIN_BANKCODE    100
#define MAX_BANKCODE    999
#define MIN_BRANCHCODE  1
#define MAX_BRANCHCODE  220
#define MIN_ACCNO       10000
#define MAX_ACCNO       99999

namespace sict
{
    class AccountNumber
    {
        char name[MAX_NAME_LENGTH + 1];
        int  bankCode;
        int  branchCode;
        int  accountNumber;
        bool validAccNumber;

    public:
        void setName(const char n[]);
        void setAccountNumber(int bankc, int branchc, int  an);
        void display() const;
        bool isValid() const;
    };
}


#endif /* AccountNumber_hpp */

*更新*

// BTP200讲习班2:复合类型和隐私MAIN.CPP

代码语言:javascript
复制
#include <iostream>
#include "AccountNumber.hpp"

using namespace std;
using namespace sict;

int main()
{
    AccountNumber myNumber;
    char name[41];
    int bankCode;
    int branchCode;
    int accNumber;

    cout << "Bank account app" << endl <<
    "===================" << endl << endl;
    cout << "Please enter your name: ";
    cin >> name;
    myNumber.setName(name);
    cout << "please enter your bank account, branch code" <<
    ", and account number as follows:" << endl << "999 999 99999: ";

    do
    {
        cin >> bankCode >> branchCode >> accNumber;
        myNumber.setAccountNumber(bankCode, branchCode, accNumber);
        myNumber.display();
    } while(!myNumber.isValid() && cout << "Invalid account number, (999 999 99999), try again: ");

    cout << "Thank you!" << endl;

    return 0;
}

ACCOUNTNUMBER.CPP

代码语言:javascript
复制
#include <iostream>
#include <cstring>
#include "AccountNumber.hpp"

#define MAX_NAME_LENGTH 40
#define MIN_BANKCODE    100
#define MAX_BANKCODE    999
#define MIN_BRANCHCODE  1
#define MAX_BRANCHCODE  220
#define MIN_ACCNO       10000
#define MAX_ACCNO       99999

using namespace std;

namespace sict
{
    void AccountNumber::setName(const char n[])
    {
        strcpy(name, n);
    };

    void AccountNumber::setAccountNumber(int bankc, int branchc, int an)
{
    validAccNumber = false;

    int bankc_v=0, branchc_v=0, an_v=0;

    cout << bankc_v << branchc_v << an_v;

    if (bankc >= MIN_BANKCODE && bankc <= MAX_BANKCODE)
    {
        bankCode = bankc;
        bankc_v=1;
    }
    if (branchc >= MIN_BRANCHCODE && branchc <= MAX_BRANCHCODE)
    {
        branchCode = branchc;
        branchc_v=1;
    }
    if (an_v >= MIN_ACCNO && an_v <= MAX_ACCNO)
    {
        accountNumber = an;
        an_v=1;
    }

    cout << bankc_v << branchc_v << an_v;

    if(bankc_v==1 && branchc_v==1 && an_v==1)
    {
        validAccNumber = true;
    }
}


    void AccountNumber::display() const
    {
        if(isValid() == 1)
        {
            cout << "Name: " << name << ", Account number: " << bankCode << "-"
            << branchCode << "-" << accountNumber << endl;
        }
        else
        {
            cout << name << " does not have a valid account number." << endl;
        }
    }

    bool AccountNumber::isValid() const
    {
        return AccountNumber::validAccNumber;
    }   
}

ACCOUNTNUMBER.HPP

代码语言:javascript
复制
#ifndef AccountNumber_hpp
#define AccountNumber_hpp

#include <stdio.h>

#define MAX_NAME_LENGTH 40
#define MIN_BANKCODE    100
#define MAX_BANKCODE    999
#define MIN_BRANCHCODE  1
#define MAX_BRANCHCODE  220
#define MIN_ACCNO       10000
#define MAX_ACCNO       99999

namespace sict
{
    class AccountNumber
    {
        char name[MAX_NAME_LENGTH + 1];
        int  bankCode;
        int  branchCode;
        int  accountNumber;
        bool validAccNumber;

    public:
        void setName(const char n[]);
        void setAccountNumber(int bankc, int branchc, int  an);
        void display() const;
        bool isValid() const;
    };
}


#endif /* AccountNumber_hpp */

产出:

代码语言:javascript
复制
    Bank account app
===================

Please enter your name: John
please enter your bank account, branch code, and account number as follows:
999 999 99999: 1 123 12345
000010John does not have a valid account number.
Invalid account number, (999 999 99999), try again: 1234 123 12345
000010John does not have a valid account number.
Invalid account number, (999 999 99999), try again: 123 0 12345
000100John does not have a valid account number.
Invalid account number, (999 999 99999), try again: 123 1234 12345
000100John does not have a valid account number.
Invalid account number, (999 999 99999), try again: 123 123 123
000110John does not have a valid account number.
Invalid account number, (999 999 99999), try again: 123 123 123456
000110John does not have a valid account number.
Invalid account number, (999 999 99999), try again: 123 123 12345
000110John does not have a valid account number.
Invalid account number, (999 999 99999), try again: 123 12345
123
000100John does not have a valid account number.
Invalid account number, (999 999 99999), try again: 123 123 12345
000110John does not have a valid account number.
Invalid account number, (999 999 99999), try again: 123 123 
123
000110John does not have a valid account number.
Invalid account number, (999 999 99999), try again: 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-27 16:03:03

代码语言:javascript
复制
else if (an_v >= MIN_ACCNO || an_v <= MAX_ACCNO)

应该是

代码语言:javascript
复制
if (an >= MIN_ACCNO && an <= MAX_ACCNO)
票数 0
EN

Stack Overflow用户

发布于 2016-05-27 15:41:48

你的if-语句总是计算为真。例如,看看其中一个:

代码语言:javascript
复制
if (bankc >= MIN_BANKCODE || bankc <= MAX_BANKCODE)

在这条语句中,由于您使用的是‘分部’操作符,您基本上是在检查是否只有一个布尔子表达式是真的。然而,要验证您的数字,您需要两个布尔子表达式为真。

相反,你可能想要的是:

代码语言:javascript
复制
if (bankc >= MIN_BANKCODE && bankc <= MAX_BANKCODE)

使用‘&’可以确保检查两个布尔子表达式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37487183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档