m0_72560671 2022-11-23 21:59 采纳率: 25%
浏览 0
已结题

有关ignore的问题

在C++学习中遇到的问题

#include <iostream>
using namespace std;
int main(){
    char a;
    cin.get(a);
    while(isalpha(a)){
        switch(a){
            case 'a':
                cout<<"A"<<endl;
                break;
            case 'b':
                cout<<"B"<<endl;
            default:
                cout<<"C"<<endl;
                cin.ignore();
        }
        cin.get(a);
    }
    return 0;
}

为什么在用cin.get输入时,在default里面加入cin.ignore(),
case ‘a’中的break就可以对while生效

img

如果换掉cin.get(),用cin输入,整个循环就会无限重复

img

  • 写回答

1条回答 默认 最新

  • zoeil Java领域优质创作者 2022-11-24 08:32
    关注

    实际上不是break将while退出了,而是不满足while循环条件退出的。
    第一次你那里是cin.get()时,输入第一个b实际上是b和回车符号,b被赋值给a,回车被ignore忽略了,后面也是如此,直到输入a和回车符号,此时a被赋值给变量a,然后break退出了switch,回车符号再次赋值给变量a,不满则while循环的条件,所以退出循环。另外,cin >> a会忽略回车,所以才会无限循环

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月3日
  • 已采纳回答 11月25日
  • 修改了问题 11月23日
  • 创建了问题 11月23日

悬赏问题

  • ¥15 hexo+github部署博客
  • ¥15 求螺旋焊缝的图像处理
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?
  • ¥15 网络通信安全解决方案
  • ¥50 yalmip+Gurobi
  • ¥20 win10修改放大文本以及缩放与布局后蓝屏无法正常进入桌面
  • ¥15 itunes恢复数据最后一步发生错误
  • ¥15 关于#windows#的问题:2024年5月15日的win11更新后资源管理器没有地址栏了顶部的地址栏和文件搜索都消失了
  • ¥100 H5网页如何调用微信扫一扫功能?