C++可执行程序cmd如何等待输入字符串?

各位,怎么等待输入string?我使用cin>>输入,但生成的可执行文件并不等待我输入而是直接跳过了。

具体完整代码如下,第170行


//C.J.K.学员管理系统(CSMS)
//CSMS: C.J.K._Scholars_Management_System
//Ownship:Confraternity of Jankers of Keyboard (C.J.K.)
//Written by 1724834368@qq.com

//////////预处理//////////
#include <bits/stdc++.h>
#include <windows.h>
#include <stdlib.h>
#include <conio.h>
#include <locale.h> 
using namespace std;
////////////////////////

//////////常量定义//////////
string Head_Str="=====C.J.K.学员管理系统(CSMS)=====\n\n";
string Please_Input_Number="\n>>请输入对应数字执行操作:\n";
string Unknown_Error=">>未知错误!\n";
//////////////////////////

//////////学员信息结构体//////////
class SDs {
    //SD:Scholars_Data
public:
    void printall() {
        cout<<"姓名:"<<Name<<endl
            <<"性别:"<<Sex<<endl
            <<"编号:"<<Number<<endl 
            <<"头衔:"<<Titles<<endl 
            <<"语言:"<<Languages<<endl 
            <<"积分:"<<Exp<<endl 
            <<"备注:"<<Note<<endl
            <<endl; 
    }
    
    string Name;      //姓名
    string Sex;       //性别
    string Number;    //编号
    string Titles;    //头衔
    string Languages; //语言
    string Exp;       //积分
    string Note;      //备注
};

vector<SDs> SDV;  //学员数据容器
SDs SDM;          //学员数据组员
///////////////////////////////

//////////头部函数声明//////////
void SLP();  //系统加载页面
void LSD();  //载入学员数据
int MMP();   //主菜单页面
int GSD();   //查询学员信息 
void SSD();  //保存学员数据
void Over(); //结束程序 
void OKEND();//回车或换行结束 
//////////////////////////////

//////////主函数//////////
int main() {
    LSD();
    SLP();
    Main_MMP_Begin:
    int Model=MMP();
    switch(Model) {
        case 48:
            system("cls");
            SSD();
            Over();
            return 0;
            break;
        case 49:
            system("cls");
            GSD();
            goto Main_MMP_Begin;
            break;
        default:
            cout<<Unknown_Error;
            Sleep(2000);
            break;
    }

    return 0;
}
/////////////////////////

//////////尾部函数定义//////////
void SLP() {
    //SLP:System_Loading_Page
    system("color F9");
    cout<<Head_Str
        <<"系统加载中";
    for(int i=0;i<10;i++) {
        Sleep(300);
        cout<<'.';
    }
    cout<<"加载成功!"<<endl;
    Sleep(1000);
    system("cls");
}

void LSD() {
    //LSD:Load_Scholars_Data
    freopen("CJK_Scholars_Data.txt","r",stdin);
    while(cin>>SDM.Name>>SDM.Sex>>SDM.Number>>SDM.Titles>>SDM.Languages>>SDM.Exp>>SDM.Note) {
        SDV.push_back(SDM);
    }
    fclose(stdin);
    fflush(stdin);
}

int MMP() {
    //MMP:Main_Meun_Page
    system("cls");
    cout<<Head_Str
        <<"【主菜单】"<<endl
        <<"0.保存并退出"<<endl
        <<"1.查询学员信息"<<endl
        <<"2.更改学员信息"<<endl
        <<"3.增删学员信息"<<endl;
    cout<<Please_Input_Number;
    Cin_Model_MMP:
    int Model;
    fflush(stdin);
    Model=getch();
    if(Model<48||Model>51) {
        
        goto Cin_Model_MMP;
    }
    return Model;
}

int GSD() {
    //GSD:Get_Scholars_Date
    cout<<Head_Str
        <<"【查询学员信息】"<<endl
        <<"0.返回主菜单"<<endl
        <<"1.查询全部学员信息"<<endl
        <<"2.查询指定姓名学员信息"<<endl
        <<"3.查询指定编号学员信息"<<endl;
    cout<<Please_Input_Number;
    Cin_Model_MMP:
    int Model;
    fflush(stdin);
    Model=getch();
    if(Model<48||Model>51) {
        goto Cin_Model_MMP;
    }
    switch(Model) {
        case 48:return 0;break;
        case 49: {
            system("cls");
            cout<<Head_Str
                <<"【查询全部学员信息】"<<endl<<endl;
            for(int i=0;i<int(SDV.size());i++) {
                SDV[i].printall();
                Sleep(100);
            }
            OKEND();
            break;
        }
        case 50: {
            system("cls");
            cout<<Head_Str
                <<"【查询指定姓名学员信息】"<<endl<<endl;
            Cin_Name:
            cout<<"请输入学员姓名:"<<endl;
            string name="";
            
            OKEND();
            break;
        }
    }
}

void Over() {
    system("cls");
    cout<<Head_Str;
    cout<<">>保存并退出!"<<endl;
    Sleep(2000);
}

void SSD() {
    //Save_Scholars_Data
}

void OKEND() {
    cout<<">>回车或换行返回主菜单..."<<endl;
            while(getch()!='\n'&&getch()!='\r') {}
}
//////////////////////////////
可能是因为你的缓冲区有额外的字符,cin>>不是跳过去了,而是把回车等那些残留的字符当作输入了
可以在跳过的地方之前加上一行
fflush(stdin);
或者
getchar()
之类的,把这些残留的字符先清除