方法 getline c++ 后 Switch 语句反应错误
Switch statemement reacting wrong after method getline c++
我正在为大学编写一个银行应用程序,我偶然发现了一个问题。让我们以我的 class 客户的方法为例。
void Customer::create_customer_data() {
cout << "Client' Address: ";
getline(cin, clientAddress);
cin.ignore();
cout << "Client's birth date: ";
getline(cin, clientBirthDate);
cin.ignore();
cout << "Client's telephone number: ";
getline(cin, clientTelephoneNumber);
cin.ignore();
cin.clear(); }
在主函数中,我有一个处理用户选择的 switch 语句。
int main() {
int choice, _globalClientNumber = 0;
Customer a(_globalClientNumber);
cout << "Welcome to bank manager 1.0!" << endl;
do {
cout << "Main Menu"<< endl;
cout << "Create a new customer (1)" << endl;
cout << "Create a new account (2)" << endl;
cout << "Cash money into account (3)" << endl;
cout << "Cash money out of account (4)" << endl;
cout << "Transfer money between two accounts (5)" << endl;
cout << "See current status of a customer and its accounts (6)" << endl;
cout << "End Application (0)" << endl;
cout << "Choice: ";
cin >> choice;
switch (choice) {
case 1:
a.create_customer_data();
break;
case 2:
a.create_new_account();
break;
case 3:
a.cash_in();
break;
case 4:
a.cash_out();
break;
case 5:
a.transfer_money();
break;
case 6:
a.print();
break;
default:
break;
}
cout << endl;
}
while (choice != 0);
return 0; }
我一直遇到的问题是,通过 create_customer_data 方法在屏幕上写入的值正在由 do-while 循环处理。因此,如果 create_customer_data 中的 clientTelephoneNumber 不以 0 结尾,则主菜单会通过 do-while 循环显示两次。如果有人能告诉我我的错误在哪里,我将不胜感激。
编辑:简而言之:choice 变量被覆盖并且 do-while 循环再次执行,导致重复打印菜单。
我会说,你的 cin
需要冲洗。
可以在这里找到答案:
How do I flush the cin buffer?
我正在为大学编写一个银行应用程序,我偶然发现了一个问题。让我们以我的 class 客户的方法为例。
void Customer::create_customer_data() {
cout << "Client' Address: ";
getline(cin, clientAddress);
cin.ignore();
cout << "Client's birth date: ";
getline(cin, clientBirthDate);
cin.ignore();
cout << "Client's telephone number: ";
getline(cin, clientTelephoneNumber);
cin.ignore();
cin.clear(); }
在主函数中,我有一个处理用户选择的 switch 语句。
int main() {
int choice, _globalClientNumber = 0;
Customer a(_globalClientNumber);
cout << "Welcome to bank manager 1.0!" << endl;
do {
cout << "Main Menu"<< endl;
cout << "Create a new customer (1)" << endl;
cout << "Create a new account (2)" << endl;
cout << "Cash money into account (3)" << endl;
cout << "Cash money out of account (4)" << endl;
cout << "Transfer money between two accounts (5)" << endl;
cout << "See current status of a customer and its accounts (6)" << endl;
cout << "End Application (0)" << endl;
cout << "Choice: ";
cin >> choice;
switch (choice) {
case 1:
a.create_customer_data();
break;
case 2:
a.create_new_account();
break;
case 3:
a.cash_in();
break;
case 4:
a.cash_out();
break;
case 5:
a.transfer_money();
break;
case 6:
a.print();
break;
default:
break;
}
cout << endl;
}
while (choice != 0);
return 0; }
我一直遇到的问题是,通过 create_customer_data 方法在屏幕上写入的值正在由 do-while 循环处理。因此,如果 create_customer_data 中的 clientTelephoneNumber 不以 0 结尾,则主菜单会通过 do-while 循环显示两次。如果有人能告诉我我的错误在哪里,我将不胜感激。
编辑:简而言之:choice 变量被覆盖并且 do-while 循环再次执行,导致重复打印菜单。
我会说,你的 cin
需要冲洗。
可以在这里找到答案: How do I flush the cin buffer?