C语言如何用单个switch语句处理多个变量完成字母解码任务
简易字母解码器优化实现方案
复用同一switch的实现方法
你可以将10个输入变量存入临时数组后循环遍历,所有元素共用同一个switch逻辑,无需编写10份重复的switch代码,示例如下:
#include <stdio.h> int main() { // 保留你已编写的输入部分代码 int c1, c2, c3, c4, c5, c6, c7, c8, c9, c10; scanf("%d %d %d %d %d %d %d %d %d %d", &c1, &c2, &c3, &c4, &c5, &c6, &c7, &c8, &c9, &c10); // 将输入值存入数组统一遍历处理 int num_list[10] = {c1, c2, c3, c4, c5, c6, c7, c8, c9, c10}; char result[11] = {0}; // 存储转换后的字母,最后一位为字符串结束符'\0' for (int i = 0; i < 10; i++) { // 所有数字共用这一个switch逻辑 switch (num_list[i]) { case 1: result[i] = 'A'; break; case 2: result[i] = 'B'; break; case 3: result[i] = 'C'; break; // 按规则补全case 4到case 25即可 case 26: result[i] = 'Z'; break; default: result[i] = '?'; // 处理1-26范围外的非法输入 } } printf("解码结果:%s", result); return 0; }
如果你不想保留10个单独的变量定义,可以直接把输入部分改成数组输入,代码会更简洁:
int num_list[10]; for (int i = 0; i < 10; i++) { scanf("%d", &num_list[i]); }
更高效的无switch实现(推荐)
由于大写字母的ASCII码是连续排列的,'A'的ASCII值为65,数字n对应的字母可以直接通过'A' + n - 1计算得到,无需编写26个case分支,替换循环内的switch逻辑即可:
for (int i = 0; i < 10; i++) { if (num_list[i] >= 1 && num_list[i] <= 26) { result[i] = 'A' + num_list[i] - 1; } else { result[i] = '?'; } }
内容的提问来源于stack exchange,提问作者Bucobyte
相关产品推荐
相关产品推荐

