栈实现句子反转程序:输入单字符'q'无法退出的问题排查
问题修复:栈实现句子反转程序的退出逻辑错误
核心问题分析
- 退出条件判断错误:原代码中
stack[0] == 'q' && stack[1] == ' \n'完全不符合需求——输入单字符q加回车时,栈中仅存在q(top=0),stack[1]属于未初始化的内存,且\n并未被压入栈(输入循环遇到\n直接终止)。 - 反转循环逻辑错误:固定循环100次会在栈元素不足时弹出大量无效字符(
pop()返回的-1对应ASCII不可见字符)。 - 栈状态未重置:未在每次输入前清空栈,可能导致上一次的残留数据干扰判断。
修正后的代码
#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
相关产品推荐
相关产品推荐

