我正在尝试创建一个图书馆管理系统,但不明白为什么 switch case 中也有一个带有break语句的循环

问题描述 投票:0回答:1

我还没有在这个程序中添加任何功能,只在“1)创建帐户”中添加了一些任务,而在此代码块中,当您在按 Enter 后输入您的名字时,即使在使用 “之后,它也会开始无限循环”打破;“它不会停止。 这是代码

#include <iostream>
#include <stdlib.h>
using namespace std;


int login_as;
int i = 3;
int std_choice;
int std_deposit;

void student() {
    char std_name;
    int std_age;
    int s = 6;
    while (s != std_choice) {
        cout << "1) Create an account\n2) View balance\n3)Purchase a Book\n4)Rent a Book\n5)Return a book\n6) Login Screen" << endl;
        cin >> std_choice;
        switch (std_choice)
        {
        case 1:
            cout << "REGISTER!" << endl;
            cout << "Enter Name:\n" << endl; //after this line it starts looping and wont break//
            cin >> std_name;
            cout << "Age: \n" << endl;
            cin >> std_age;
            cout << "Please deposit 10$ as initial deposit!\n1)Yes\n2)No" << endl;
            cout << "curl qreno.de/https://www.google.com" << endl;
            cin >> std_deposit;
            break;
        
        default:
            break;
        }
    }

}


int main() {
    while (i != login_as ){
        cout << "Login as:\n1) User\n2) Librarian\n3) Exit" << endl;
        cin >> login_as;
        student();
    }
    
    return 0;
}

我避免询问 chatgpt 或 phind,因为它会直接向我展示解决方案,我希望它从人类的角度来看。 我以为输入后它会一一打印语句

c++ loops switch-statement infinite-loop
1个回答
0
投票

您已使用

char
数据类型将您的姓名存储在
std_name
中(如 中所述)。但是,如果您输入多个字符,
cin >> std_name
可能会破坏您的代码(因为您尝试在一个旨在存储单个字符的变量中存储多个字符)。

要解决此问题,请将

std_name
的数据类型更改为
char*
(指向 C 字符串开头的指针)或
std::string
,例如

char* std_name;

© www.soinside.com 2019 - 2024. All rights reserved.