You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于流程图编写C语言代码时循环跳转逻辑实现问题求助

问题分析

现有代码存在以下可优化点:

  • 输入缓冲区残留问题:scanf("%c", &NA) 会读取上一次输入整数后留下的换行符,导致NA被赋值为不可见的换行字符,逻辑判断失效
  • 无条件死循环:当前代码所有分支执行完都会触发goto step2,没有对应你要求的「步骤6判断为真时终止」的退出逻辑
  • 输出无换行,多轮运行后内容会拼接在一起可读性差

修正后代码

#include <stdio.h>
#include <math.h>

int main()
{
    int AA = 5;
    char NA = 'K';

step2:
    if (NA == 'K')
    {
        printf("NA= %c\n" , NA);
        printf("AA= %d\n", AA);
    }
    else if (AA < 3)
    {
        NA = 'B';
        printf("NA= %c\n", NA); 
        printf("AA= %d\n", AA);
    }
    else if (AA < 4)
    {
        NA = 'C';
        printf("NA= %c\n", NA);
        printf("AA= %d\n", AA);
    }
    else
    {
        printf("input value of NA =");
        scanf(" %c", &NA); // %c前加空格忽略前置空白字符
        printf("input value of AA =");
        scanf("%d", &AA);
        goto step2; // 只有判断为假时才跳转回step2重新执行
    }

    return 0;
}

修改说明

  • scanf(" %c", &NA) 中%c前的空格会自动忽略输入缓冲区中残留的换行、空格等空白字符,避免读入无效值
  • 将原来的无条件goto step2移到了else分支末尾:只有当前三个分支都不匹配(也就是你说的步骤6判断为假)时,才会跳转回步骤2重新执行,只要匹配到前三个合法分支(判断为真)就会正常执行到return 0退出程序
  • 给所有printf增加了换行符\n,优化输出展示效果
  • 移除了else分支末尾多余的分号

内容的提问来源于stack exchange,提问作者hachimanhiki12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:30:01