我输入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;
}
 

...全文
229 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是啥意思呢?

内容概要:本文系统研究了基于电流和功率两种模型预测控制(MPC)方法对三相并网逆变器进行闭环仿真控制的策略,旨在提升逆变器在复杂电网环境下的动态响应性能与系统稳定性。通过在Simulink中构建电流预测与功率预测双模式MPC控制模型,实现了对并网电流、有功及无功功率的高精度跟踪与调节。研究涵盖了系统建模、预测控制器设计、代价函数构建、约束条件处理以及多工况仿真验证,重点对比分析了两种MPC策略在稳态运行、电网扰动及动态切换等场景下的控制性能差异。结果表明,所提出的双模式MPC方法能有效抑制电流畸变、提升功率调节精度,并显著增强系统的鲁棒性与电能质量。; 适合人群:具备电力电子、自动控制理论基础,熟练掌握MATLAB/Simulink仿真工具,从事新能源发电、并网逆变器控制、微电网系统等方向的研究生、科研人员及工程技术人员。; 使用场景及目标:① 深入理解模型预测控制在三相并网逆变器中的具体应用原理与实现流程;② 对比分析电流型MPC与功率型MPC在控制精度、动态响应和抗扰能力方面的性能差异;③ 为高性能并网逆变器控制器的设计、优化与工程化实现提供理论依据和仿真技术支持。; 阅读建议:建议结合提供的Simulink仿真模型与Matlab代码进行动手复现,重点关注预测模型的建立过程、代价函数的设计逻辑以及系统约束的处理方法,并通过设置不同电网工况进行测试,深入掌握MPC控制的实时优化机制与动态调节特性。
内容概要:本文档以《2026年6月算法——扎哈克优化算法(Matlab代码实现)》为核心,系统介绍了一种新提出的智能优化算法——扎哈克优化算法,并结合MATLAB/Simulink仿真技术,全面整合了智能优化算法、机器学习、深度学习、路径规划、电力系统、信号处理、雷达通信、车间调度等多个科研领域的技术资源与解决方案。文档不仅展示了该算法在调度、选址、路径规划等复杂题中的应用潜力,还提供了大量Matlab代码与Simulink仿真案例,涵盖新能源并网、电动汽车调度、微电网优化、无人机路径规划等前沿方向。同时,资源包广泛覆盖生产调度、电力系统优化、通信技术、图像处理、元胞自动机模拟等多学科交叉领域,强调“借力”与“创新”并重的科研理念,旨在为研究者提供从理论建模到仿真复现的一站式技术支持。; 适合人群:具备一定MATLAB编程基础,从事电气工程、自动化、人工智能、运筹优化、信号处理、通信工程、控制科学等相关领域研究的科研人员、研究生及工程技术人员。; 使用场景及目标:① 学习并复现扎哈克优化算法等新型智能优化算法,应用于生产调度、路径规划、电力系统优化等复杂工程题;② 获取丰富的Matlab/Simulink仿真资源,用于科研项目开发、学位论文复现或课程设计;③ 探索机器学习、深度学习、强化学习在能源、交通、通信等领域的交叉融合与实际应用;④ 借助多领域技术资源包提升科研效率,实现从算法设计到系统仿真的全流程验证。; 阅读建议:建议读者通过提供的网盘链接下载完整资源包,结合公众号“荔枝科研社”获取更新支持;学习过程中应按照目录结构循序渐进,重点关注算法原理、代码实现与仿真模型之间的对应关系,优先选择与自身研究方向匹配的模块进行实践,动手调试代码以深化理解,并充分利用其中的论文复现案例提升科研创新能力。

70,038

社区成员

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

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