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

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

内容概要:本文针对并网光伏系统中存在的电能质量题,特别是总谐波失真(THD)过高的挑战,提出了一种基于机器学习算法的创新型级联多电平逆变器智能控制方案。该研究摒弃了传统控制策略对精确系统数学模型的依赖,创新性地将级联前馈神经网络(CFNN)与深度神经网络(DNN)相结合,构建了一个协同控制体系。CFNN负责快速响应光伏出力波动和电网参数变化,输出初步开关状态以抑制低次谐波;DNN则对数据进行深度挖掘,精准校正开关状态,进一步抑制高次谐波。通过这种分层协同控制,有效实现了对总谐波失真的大幅降低,同时确保了并网电流与电网电压的同频同相,显著提升了并网效率和电能质量。研究通过理论分析与性能对比验证,证明了该方案在THD、功率因数和响应时间等关键指标上均优于传统PI控制和单一神经网络控制,为解决复杂工况下的光伏并网难题提供了高效、可靠的智能化新路径,并提供了Matlab/Simulink代码实现。; 适合人群:具备电力电子、自动控制或新能源等相关专业背景,对机器学习在电力系统应用感兴趣的研究人员、研究生及工程技术人员。; 使用场景及目标:① 研究光伏并网逆变器的先进控制策略,特别是如何利用机器学习算法优化电能质量;② 探索级联多电平逆变器在复杂工况(如光照波动、负载变化)下的谐波抑制与高效并网协同优化方法;③ 获取可用于仿真复现和二次开发的Matlab/Simulink代码资源。; 阅读建议:此资源紧密结合理论分析、方案设计与仿真验证,读者在学习时应重点关注CFNN与DNN的协同工作机制,并结合提供的代码进行仿真调试,深入理解机器学习算法如何从数据驱动的角度解决传统控制难题,从而掌握智能控制在新能源领域的应用范式。
内容概要:本文围绕数据流图设计与可视化在芯片制造领域的应用展开,重点聚焦于晶圆制造过程中的良率追踪与优化。通过引入时序流图建模、桑基图深度应用及流数据处理技术,构建能够反映晶圆批次在各工艺节点间流动与损耗的可视化系统。文中以pyecharts实现桑基图的代码案例为核心,展示如何将光刻、蚀刻、沉积等工序及其良率损耗转化为可交互的数据流图,实现流量守恒下的全流程追踪,并支持根因分析与瓶颈识别。系统还可集成Kafka等流式架构实现动态更新,未来将进一步融合图神经网络(GNN)实现良率流失预测,并支撑3D数字孪生工厂建设。; 适合人群:具备一定数据分析与Python编程基础,从事半导体制造、工业智能化、数据可视化等相关工作的工程师与技术人员。; 使用场景及目标:①实现晶圆制造过程中良率损耗的可视化追踪与根因定位;②动态监控各工序WIP积压与设备负载,优化生产排程;③追踪工艺参数传递影响,提升制程稳定性;④为数字孪生与智能预测系统提供可视化基础。; 阅读建议:学习者应结合代码实例动手实践桑基图构建,理解节点与链接的设计逻辑,重点关注流量守恒原则与颜色溯源机制,并尝试将其扩展至更复杂的多返工路径场景中进行验证与优化。

70,038

社区成员

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

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