我输入3.142412swich不应该只加3就退出了么,为什么后面会显示其他数字也加了啊求问

好学的dj 2021-11-29 15:50:50


#include <stdio.h>

int main(void)
{
    int i, ch;
    int cnt[10] = {0};    /* 数字字符的出现次数 */

    while ((ch = getchar()) != EOF) {
        switch (ch) {
         case '0' : cnt[0]++; break;
         case '1' : cnt[1]++; break;
         case '2' : cnt[2]++; break;
         case '3' : cnt[3]++; break;
         case '4' : cnt[4]++; break;
         case '5' : cnt[5]++; break;
         case '6' : cnt[6]++; break;
         case '7' : cnt[7]++; break;
         case '8' : cnt[8]++; break;
         case '9' : cnt[9]++; break;
        }
    }

    puts("数字字符的出现次数");
    for (i = 0; i < 10; i++)
        printf("'%d':%d\n", i, cnt[i]);

    return 0;
}
 

...全文
209 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
NorZ 2021-11-30
  • 打赏
  • 举报
回复

switch内的break只break switch,不会 break while

疯狂刷题中 2021-11-29
  • 打赏
  • 举报
回复

同学,你输入了多个字符后,如果你没有清除键盘缓冲区,getchar()会将它们都读取,所以,每一次调用getchar()函数后,最好清除一下键盘缓冲区,像这样:

#include <stdio.h>

int main(void) {
    int i, ch;
    int cnt[10] = {0};    /* 数字字符的出现次数 */

    while ((ch = getchar()) != EOF) {
        setbuf(stdin, NULL); // 加上这1行:清除键盘缓冲区【windows可以直接用fflush(stdin)】
        switch (ch) {
            case '0' :
                cnt[0]++;
                break;
            case '1' :
                cnt[1]++;
                break;
            case '2' :
                cnt[2]++;
                break;
            case '3' :
                cnt[3]++;
                break;
            case '4' :
                cnt[4]++;
                break;
            case '5' :
                cnt[5]++;
                break;
            case '6' :
                cnt[6]++;
                break;
            case '7' :
                cnt[7]++;
                break;
            case '8' :
                cnt[8]++;
                break;
            case '9' :
                cnt[9]++;
                break;
        }
    }

    puts("数字字符的出现次数");
    for (i = 0; i < 10; i++)
        printf("'%d':%d\n", i, cnt[i]);

    return 0;
}

好学的dj 2021-11-30
  • 举报
回复
@疯狂刷题中 哦哦哦懂了谢谢老师了
zara 2021-11-29
  • 打赏
  • 举报
回复

那就是 break; 只 break 了 switch() 吧,外面还有个 while()

todo9351 2021-11-29
  • 打赏
  • 举报
回复

写switch 为什么没有 default ???

forever74 2021-11-29
  • 打赏
  • 举报
回复

那么while是啥意思呢?

多旋翼无人机的软着陆,使用稳健的非线性控制和风力建模(Matlab代码实现)内容概要:本文围绕多旋翼无人机的软着陆题,提出了一种基于稳健非线性控制与风力建模的解决方案,并通过Matlab代码实现仿真验证。研究重点在于设计能够应对外部风扰的非线性控制器,提升无人机在复杂气象条件下降落过程中的稳定性与安全性。文中详细阐述了系统动力学建模、风力干扰建模方法以及非线性控制策略的设计过程,特别是采用了非线性模型预测控制(MPC)框架,增强了系统对不确定性环境的适应能力。该方案有效提升了无人机软着陆的精度和鲁棒性。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的科研人员及工程技术人员,尤其适用于从事无人机控制、飞行器导航与制导、非线性系统控制等相关领域的研究生和研究人员。; 使用场景及目标:①应用于多旋翼无人机在强风或突变风场环境下的安全着陆控制;②为复杂环境下飞行器的鲁棒控制设计提供技术参考;③服务于科研项目中对非线性MPC控制算法的仿真验证与优化。; 阅读建议:建议读者结合Matlab代码深入理解控制算法的具体实现流程,重点关注系统建模与控制器设计之间的衔接逻辑,并可通过修改风扰参数进行仿真测试,以深对鲁棒性设计的理解。

70,040

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧