基于流程图编写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
相关产品推荐
相关产品推荐

