为什么选择选项循环

  • 本文关键字:选项 循环 选择 c++
  • 更新时间 :
  • 英文 :


试图创建ATM将使用的算法,但在选择输入卡号或退出后,代码会一直循环回这个问题。对C++来说还是个新手,这让我很困惑。我相信我的问题出现在代码的开头,因为在程序开始循环之前,我无法深入了解程序。

#include <iostream>
#include <string>
#include <vector>
using namespace std;
// abstract class
struct Person
{
string name;
virtual void printName() = 0;
};
//Account class
struct Account : public Person
{
long cardNumber;
int pin; // 4 digit pin
double balance;
Account()
{
cardNumber = 0;
pin = 1234;
balance = 0;
}
Account(long c, int p, double bal)
{
cardNumber = c;
pin = p;
balance = bal;
}
void withdraw()
{
double amount;
cout << "Enter amount less than " << balance << ": ";
cin >> amount;
balance -= amount;
checkBalance();
}
void checkBalance()
{
cout << "Your balance is: " << balance << endl;
}
void changePin()
{
int Pin;
cout << "ENTER NEW PIN: ";
cin >> Pin;
pin = Pin;
cout << "PIN CHANGED n";
}
void printName()
{
cout << "Name of Person: ";
cout << name << endl;
}
};
struct ATM
{
vector<Account> accounts;
void Login()
{
long cardNumber;
cout << "Enter cardNumer: ";
cin >> cardNumber;
for (int i = 0; i < accounts.size(); ++i)
{
if (cardNumber == accounts[i].cardNumber)
{
long pin;
cout << "Enter PIN: ";
cin >> pin;
if (pin == accounts[i].pin)
{
int choice = 0;
cout << "1. WITHDRAWn";
cout << "2. CHECK BALANCEn";
cout << "3. CHANGE PINn";
cout << "4. EXITn";
cout << "Enter your choice: ";
cin >> choice;
switch (choice)
{
case 1: accounts[i].withdraw();
break;
case 2: accounts[i].checkBalance();
break;
case 3: accounts[i].changePin();
break;
case 4: cout << "THANK YOU FOR USINGn";
break;
default: cout << "NO A VALID CHOICE BYE!!n";
}
}
else
cout << "WRONG PIN BYE!!";
}
}
}
};
int main()
{
int choice = 0;
ATM A;
Account temp;
temp.name = "John Doe";
temp.cardNumber = 123456789;
temp.pin = 1234;
temp.balance = 30000;
A.accounts.push_back(temp);
temp.name = "David Joe";
temp.cardNumber = 987654321;
temp.pin = 4321;
temp.balance = 10000;
A.accounts.push_back(temp);
while (choice != 2)
{
cout << "1. LOGINn";
cout << "2. EXITn";
cout << "ENTER CHOICE: ";
cin >> choice;
switch (choice)
{
case 1: A.Login();
break;
case 2: cout << "BYE!!n";
break;
default: cout << "ENTER A VALID CHOICEn";
}
}
}

非常感谢您的帮助。

除了拼写错误的cardNumer和可通过修复的有符号/无符号比较警告

for (size_t i = 0; i < accounts.size(); ++i)

该代码并没有什么真正的错误,下面的运行证明了这一点:

1. LOGIN
2. EXIT
ENTER CHOICE: 1
Enter cardNumer: 7
1. LOGIN
2. EXIT
ENTER CHOICE: 1
Enter cardNumer: 123456789
Enter PIN: 1234
1. WITHDRAW
2. CHECK BALANCE
3. CHANGE PIN
4. EXIT
Enter your choice: 2
Your balance is: 30000
1. LOGIN
2. EXIT
ENTER CHOICE:

如果您输入了一个无效的卡号,它将返回主菜单,但问题并不完全清楚,而且您还没有指定您使用的测试数据。

最新更新