杀入巅峰 2023-03-07 08:57 采纳率: 77.8%
浏览 18
已结题

关于建立某个系统中输入的问题

我定义了一个整型n,用scanf输入值,然后又用到swicth中,但当我输入字符的时候却会进入死循环

  • 写回答

5条回答 默认 最新

  • MarkHan_ 2023-03-07 09:02
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    这是因为当你输入字符时,scanf函数会将字符留在输入缓冲区中,而switch语句又会不断读取缓冲区的内容进行匹配,导致了死循环。

    为了避免这种情况,可以在使用scanf函数后使用fflush(stdin)函数清空输入缓冲区,或者使用getchar函数将输入缓冲区中的字符读取并忽略掉。例如:

    int n;
    scanf("%d", &n);
    fflush(stdin);  //清空输入缓冲区
    switch(n) {
        //...
    }
    
    
    

    或者:

    int n;
    scanf("%d", &n);
    while(getchar() != '\n');  //读取并忽略输入缓冲区中的字符
    switch(n) {
        //...
    }
    
    
    

    这样就能避免由于输入错误类型导致的死循环问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 9月21日
  • 已采纳回答 9月13日
  • 创建了问题 3月7日

悬赏问题

  • ¥40 微信小程序 使用vant组件ActionSheet 下拉面板,内容区域滚动会触发。scroll-view自定义下拉刷!即使设置停止下拉刷新也不行。
  • ¥15 专业问题提问,7月5号2点之前
  • ¥15 使用rml 2016.10a数据集做半监督学习的自动调制识别
  • ¥25 使用cube ai 导入onnx模型时报错
  • ¥15 关于#微信小程序#的问题:用一个网页显示所有关联的微信小程序数据,包括每个小程序的用户访问量
  • ¥15 root的安卓12系统上,如何使apk获得root或者高级别的系统权限?
  • ¥20 关于#matlab#的问题:如果用MATLAB函数delayseq可以对分数延时,但是延时后波形较原波形有幅度上的改变
  • ¥15 使用华为ENSP软件模拟实现该实验拓扑
  • ¥15 通过程序读取主板上报税口的数据
  • ¥15 matlab修改为并行