如何检查堆栈是否只得到单字字母?

问题描述 投票:0回答:1

我试图开发的程序是通过使用堆栈(先进后出)来反转输入的句子。我只是假设句子的输入字母不会超过 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”时,它不会经历“中断”。

c stack
1个回答
0
投票

您的终止测试包括

... && stack[1] == ' \n'
,但您退出输入循环而不堆叠
'\n'

也许:

if( stack[0] == 'q' && top == 0 ) ...

即测试堆栈有

'q'
,只有
'q'
。或者换一种说法;正好有一项是
'q'
.

© www.soinside.com 2019 - 2024. All rights reserved.