我试图开发的程序是通过使用堆栈(先进后出)来反转输入的句子。我只是假设句子的输入字母不会超过 100。要停止程序,用户只需要输入单字字母“q”。下面是我设计的代码。
#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) {
while (1) {
char character;
scanf_s("%c", &character);
if (character == '\n') {
break;
}
push(character);
}
if (stack[0] == 'q' && stack[1] == ' \n') {
break;
}else {
for (int i = 0; i < 100; i++) {
printf("%c", pop());
}
}
printf("\n");
}
}
程序做它必须做的;它颠倒了我作为输入给出的句子。但是,当输入非文字字母“q”时,它不会经历“中断”。
您的终止测试包括
... && stack[1] == ' \n'
,但您退出输入循环而不堆叠'\n'
。
也许:
if( stack[0] == 'q' && top == 0 ) ...
即测试堆栈有
'q'
,只有'q'
。或者换一种说法;正好有一项是'q'
.