【问题标题】:'cin' inside loop: read error [duplicate]'cin'内部循环:读取错误[重复]
【发布时间】:2018-08-15 11:44:06
【问题描述】:

当我给'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";
}

【问题讨论】:

  • 你为什么不直接输入数字,这就是你的switch 语句所暗示的意思?
  • 当我意外输入字符时,默认语句无限执行的原因是什么。为什么在下一次迭代时 'cin' 没有阻塞?
  • 你可能想做if (cin&gt;&gt;choice) { switch... } else break;。其中 switch 是整个当前的 switch 块。
  • Alwyas 检查输入是否成功。它只是反复失败。与switch 声明完全无关。这个问题有很多问题/答案。

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


【解决方案1】:

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

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

所以你需要在读取下一个值之前读取新的行值。

【讨论】:

  • 我没有投反对票,但 this 不是问题:格式化输入会跳过前导空格。
【解决方案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 总是会中断最里面的循环。

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

如果您想跳出两个循环,请使用标签并使用 goto 跳转。 所以基本上它进入了无限循环,因为你的休息只是从开关盒中出来。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 1970-01-01
    • 2015-04-07
    • 2017-05-27
    • 1970-01-01
    • 2013-06-07
    • 2017-05-03
    相关资源
    最近更新 更多