循环内的'cin':读取错误

时间:2018-08-15 11:44:07

标签: c++ switch-statement do-while

当我向'choice'输入字符时,将重复执行默认语句。 “ cin”指令不会阻止执行。

#include<iostream>
using namespace std;
main()
{
    int choice;



    do{
            cout<<"Enter your choice: ";
            cin>>choice; //I'm giving character i/p even though 'choice' is int
        switch(choice)
        {
            case 1:cout<<"\n 1 \n";
                   break;

            case 2:cout<<"\n 2 \n";
                   break;

            case 3:cout<<"\n 3 \n";
                   break;

            case 4:cout<<"\n 4 \n";
                   return 0;

           default:cout<<"An Invalid choice."<<endl;

        }

    }while(1);

        cout<<"\n Hello";
}

2 个答案:

答案 0 :(得分:-1)

cout语句不应该被阻塞,那将是您所指的cin。

在这种情况下,cin将读取值,但不读取其后的换行符,因此下次读取值时,您将读取换行符。

因此,您需要在读取下一个值之前先读取新行的值。

答案 1 :(得分:-2)

通过为选择变量赋予结束限制来尝试以下代码。

main(){
int choice;



do{
        cout<<"Enter your choice: ";
        cin>>choice; //I'm giving character i/p even though 'choice' is int
    switch(choice)
    {
        case 1:cout<<"\n 1 --\n";
               break;

        case 2:cout<<"\n 2 \n";
               break;

        case 3:cout<<"\n 3 \n";
               break;

        case 4:cout<<"\n 4 \n";
               return 0;

       default:cout<<"An Invalid choice."<<endl;

    }

}while(choice>4);

    cout<<"\n Hello";

}

中断总是中断最内层的循环。

break语句终止执行最小的 switch 或迭代语句。

如果要打破这两个循环,请使用标签并跳至goto。 因此,基本上来说,它进入了无限循环,因为您的休息只是从开关情况中摆脱出来。