C++简易ATM系统循环与数组问题:账户输入功能实现求助
修正C++简易ATM系统的账户输入逻辑
你的代码存在两个核心问题:
- 多层嵌套循环逻辑错误:你用了三层嵌套for循环,这会导致输入流程完全混乱,每个账户的三个字段应该在同一个循环迭代内完成,而非嵌套遍历数组。
- 输入缓冲区残留换行符:用
cin >>读取整数后,输入缓冲区里会留下换行符,后续的getline会直接读取这个空行,导致账户名输入被跳过。
以下是修正后的完整代码:
#include <iostream> #include <string> #include <limits> using namespace std; int main() { const int ACCOUNT_COUNT = 2; int AccNum[ACCOUNT_COUNT]; string AccName[ACCOUNT_COUNT]; float AccBal[ACCOUNT_COUNT]; cout << "********** ENTER ACCOUNT **********" << endl; for(int i = 0; i < ACCOUNT_COUNT; i++){ cout << "Enter Account number: "; cin >> AccNum[i]; // 清空输入缓冲区的换行符,避免影响后续getline cin.ignore(numeric_limits<streamsize>::max(), '\n'); cout << "Enter Account Name: "; getline(cin, AccName[i]); cout << "Enter Amount: "; cin >> AccBal[i]; // 输入完一个账户后换行分隔,提升可读性 cout << endl; } // 展示所有账户信息 cout << "\n********** THE ACCOUNTS ARE **********" << endl; for(int i = 0; i < ACCOUNT_COUNT; i++){ cout << "Account number: " << AccNum[i] << endl; cout << "Account name: " << AccName[i] << endl; cout << "Balance: " << AccBal[i] << endl; // 账户间添加分隔线 if(i != ACCOUNT_COUNT - 1){ cout << "--------------------------------------" << endl; } } return 0; }
关键修正点说明
- 用单层循环处理每个账户,确保每个账户的三个字段依次输入。
- 使用
cin.ignore(numeric_limits<streamsize>::max(), '\n')清空输入缓冲区的换行符,需包含<limits>头文件来使用numeric_limits。 - 添加了账户信息展示模块,按照要求的格式输出所有账户数据。
输入输出示例
输入流程:
********** ENTER ACCOUNT ********** Enter Account number: 1231232 Enter Account Name: James white Enter Amount: 1000 Enter Account number: 456456 Enter Account Name: Lily Brown Enter Amount: 2500
输出结果:
********** THE ACCOUNTS ARE ********** Account number: 1231232 Account name: James white Balance: 1000 -------------------------------------- Account number: 456456 Account name: Lily Brown Balance: 2500
内容的提问来源于stack exchange,提问作者Punkkkk
相关产品推荐
相关产品推荐

