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

如何将C语言摩尔斯码解码代码的do-while转换为while循环

摩尔斯码解码循环转换方案(替换do-while(true)为带条件的while)

1. 改造read_morse_return_char函数

原函数通过do-while(true)无限循环,靠遇到空格/换行时return终止。我们可以将读取操作与循环终止条件绑定,用明确的边界控制循环:

static char read_morse_return_char(FILE *morse_file, struct hsearch_data *hashtable) {
    int read_char;
    // 持续读取直到遇到空格、换行或文件结束
    while ((read_char = fgetc(morse_file)) != ' ' && read_char != '\n' && read_char != EOF) {
        morse_buff[morse_buff_idx++] = read_char;
    }

    // 处理文件结束的边界情况
    if (read_char == EOF) {
        morse_buff_idx = 0;
        return '\0'; // 可根据需求替换为错误标记或其他处理
    }

    // 遇到空格/换行时解码摩尔斯码
    morse_buff[morse_buff_idx] = '\0';
    morse_buff_idx = 0;
    ENTRY item = {.key = morse_buff};
    return morse_char_to_roman_char(hashtable, item);
}

2. 改造read_morse_display_word函数

原函数用do-while(true)加break终止循环,我们将读取操作放入while条件,靠EOF自然终止循环,同时调整最后单词的处理逻辑:

void read_morse_display_word(FILE *morse_file, struct hsearch_data *hashtable) {
    assert("NULL pointer passed as morse file" && morse_file != NULL);
    
    char word[WORD_BUFFER_SIZE];
    int word_idx = 0;
    int read_char;

    // 循环读取直到文件结束
    while ((read_char = fgetc(morse_file)) != EOF) {
        if (read_char == ' ') {
            // 处理单词分隔空格:输出当前单词并重置缓冲区
            word[word_idx++] = ' ';
            word[word_idx] = '\0';
            printf("%s", word);
            word_idx = 0;
            // 跳过第二个分隔空格(保持原逻辑)
            fgetc(morse_file);
        } else {
            // 填充摩尔斯码缓冲区并解码字符到单词缓冲区
            morse_buff[morse_buff_idx++] = read_char;
            word[word_idx++] = read_morse_return_char(morse_file, hashtable);
        }
    }

    // 处理文件结束时剩余的未输出单词(与原逻辑保持一致,添加空格)
    if (word_idx > 0) {
        word[word_idx++] = ' ';
        word[word_idx] = '\0';
        printf("%s", word);
    }
    printf("\n");
}

改造说明

  • 完全移除了do-while(true)和break语句,用明确的循环条件控制流程
  • 补充了read_morse_return_char的EOF处理,避免缓冲区异常
  • 保留了原代码的核心逻辑:摩尔斯码缓冲区填充、空格分隔单词、终端输出格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:30:47