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

栈实现句子反转程序:输入单字符'q'无法退出的问题排查

问题修复:栈实现句子反转程序的退出逻辑错误

核心问题分析

  1. 退出条件判断错误:原代码中stack[0] == 'q' && stack[1] == ' \n'完全不符合需求——输入单字符q加回车时,栈中仅存在q(top=0),stack[1]属于未初始化的内存,且\n并未被压入栈(输入循环遇到\n直接终止)。
  2. 反转循环逻辑错误:固定循环100次会在栈元素不足时弹出大量无效字符(pop()返回的-1对应ASCII不可见字符)。
  3. 栈状态未重置:未在每次输入前清空栈,可能导致上一次的残留数据干扰判断。

修正后的代码

#include <stdio.h>

char stack[100];
int top = -1;

char push(char character) {
    if (top == 99) {
        return -1;
    }
    return stack[++top] = character;
}

char pop() {
    if (top == -1) {
        return -1;
    }
    return stack[top--];
}

int main(void) {
    while (1) {
        top = -1; // 每次输入前重置栈,清空残留数据
        char character;
        while (1) {
            scanf_s("%c", &character);
            if (character == '\n') {
                break;
            }
            push(character);
        }

        // 判断是否输入单个字符'q'
        if (top == 0 && stack[0] == 'q') {
            break;
        } else {
            // 仅弹出栈中有效元素
            while (top >= 0) {
                printf("%c", pop());
            }
            printf("\n");
        }
    }
    return 0;
}

关键修改说明

  • 重置栈状态:每次外层循环开始时将top设为-1,确保栈处于空状态,避免历史数据影响判断。
  • 修正退出判断:通过top == 0 && stack[0] == 'q'准确识别单字符q的输入(此时栈中仅有q一个元素)。
  • 优化反转循环:使用while (top >= 0)循环,仅弹出栈中存在的有效字符,避免输出无效内容。
  • 调整换行输出位置:将换行输出移至else块内,避免退出程序时额外输出空行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:37:38