c++ cin一个整数 输入其它字符产生死循环错误的解决方法。

来源:互联网 发布:java的多态 编辑:程序博客网 时间:2024/06/05 10:47
#include <iostream>#include <string>using namespace std;typedef struct node{    string str;    node* next;}node;node *top = NULL; void create(){if (top != NULL) {cout << "stack is existing" << endl;return;}    top=new node;    top->str="HeadNode";    top->next=NULL;    cout<<"stack intialize successfully"<<endl;}bool isempty(){if (top == NULL){cout << "stack is not existing,please create one" << endl;return true;}    if(top->next==NULL)    {        cout<<"stack is empty"<<endl;        return true;    }    cout<<"not empty"<<endl;    return false;}void push(string ele){if (top == NULL){cout << "stack is not existing,please create one" << endl;return;}    node *tmp=new node;    tmp->next=top->next;    tmp->str=ele;    top->next=tmp;}string pop(){if (top == NULL){cout << "stack is not existing,please create one" << endl;return "";}    if(isempty())    {        return "";    }node *pItem = top->next;    string tmp=pItem->str;    top->next=pItem->next;delete pItem;    return tmp;}void print(node*t){if (top == NULL){cout << "stack is not existing,please create one" << endl;return;}    while(t!=NULL)    {        cout<<t->str<<endl;        t=t->next;    }} int main(){    int n = -1;    string ele="";cout << "1: create" << endl;cout << "2: isempty" << endl;cout << "3: push a element" << endl;cout << "4: pop a element" << endl;cout << "5: print all element" << endl;    while(true)    {        ele="";cout << "Please enter the command number: ";        cin>>n; if (cin.fail())// when you enter a English character,it will appear endless loop,Code below will get it right!{cin.sync();cin.clear(); n = -1;cout<<"illegal charactor"<<endl;continue;}        switch(n)        {        case 1:            create();            break;        case 2:            isempty();            break;        case 3:if (top == NULL){cout << "stack is not existing,please create one" << endl;break;}cout << "Please enter a string: ";            cin>>ele;            push(ele);            break;        case 4:            ele=pop();            if(ele.length()==0)                break;            cout<<"pop "<<ele<<endl;            break;        case 5:            print(top);            break;        case 0:            return 0;         default:            cout<<"illegal charactor"<<endl;            break;        }     } // while(true)while(!top)  //when the application exit,the memory we allocated will return to system,seem we don't need free memory.{            //but in order to develop good habits use delete correspond to new.node *tmp = top;top = top->next;delete tmp;}    return 0;}

0 0