Я скомпилировал программу, которая переводит инфиксную нотацию в постфиксную нотацию, а потом я получил эти «?». внутри вертикальных прямоугольников. Я на компьютере с Windows и с помощью GNU gcc для компиляции.Вопросительные знаки внутри вертикальных прямоугольников после компиляции?
Может кто-нибудь объяснить мне, для чего нужны вопросительные знаки или почему они появились?
Я предоставлю код, который у меня есть.
stack.h
typedef struct Stack {
int top;
int MAXSTACKSIZE;
int * stk;
} Stack;
void InitializeStack(Stack * stack, int length);
int Precedence(char symbol);
void Push(Stack * stack, int element);
int Pop(Stack * stack);
int Top(Stack * stack);
int Size_S(Stack * stack);
int isEmpty(Stack * stack);
void Convert(Stack * stack, char infix[], char postfix[]);
void PrintStack(Stack * stack);
stack.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include "stack.h"
void InitializeStack(Stack * stack, int length) {
stack -> stk = malloc(sizeof(int) * length);
stack -> MAXSTACKSIZE = length;
stack -> top = -1;
}
int Precedence(char symbol) {
if (symbol == '^') {
return 3;
} else if (symbol == '*' || symbol == '/' || symbol == '%') {
return 2;
} else if (symbol == '+' || symbol == '-') {
return 1;
} else {
return 0;
}
}
void Push(Stack * stack, int element) {
int * temp;
int i;
if (Size_S(stack) == stack -> MAXSTACKSIZE) {
stack -> MAXSTACKSIZE++;
temp = malloc(sizeof(int) * stack -> MAXSTACKSIZE);
for (i = 0; i < Size_S(stack); i++) {
temp[i] = stack -> stk[i];
}
free(stack -> stk);
stack -> stk = temp;
}
int t = stack -> top + 1;
stack -> top = t;
stack -> stk[t] = element;
}
int Top(Stack * stack) {
if (isEmpty(stack)) {
return -1;
}
return stack -> stk[stack -> top];
}
int Pop(Stack * stack) {
int element;
if (isEmpty(stack)){
return -1;
}
element = Top(stack);
stack -> stk[stack -> top] = 0;
stack -> top = stack -> top - 1;
return element;
}
int Size_S(Stack * stack) {
return (stack -> top) + 1;
}
int isEmpty(Stack * stack) {
if (stack -> top == -1) {
return 1;
} else {
return 0;
}
}
void Convert(Stack * stack, char infix[], char postfix[]) {
char x, token;
int i, j;
j = 0;
for (i = 0; infix[i] != '\0'; i++) {
token = infix[i];
if (isalnum(token)) {
postfix[j++] = token;
} else if (token == '(') {
Push(stack, '(');
} else if (token == ')') {
while ((x = Pop(stack)) != '(') {
postfix[j++] = x;
}
} else {
while (Precedence(token) <= Precedence(Top(stack)) && !isEmpty(stack))
{
x = Pop(stack);
postfix[j++] = x;
}
Push(stack, token);
}
}
while (!isEmpty(stack))
{
x = Pop(stack);
postfix[j++] = x;
}
postfix[j] = '\0';
}
void PrintStack(Stack * stack) {
int length = Size_S(stack);
printf("Length: %d\n", length);
int i;
for (i = 0; i < length; i++) {
printf("%d ", stack -> stk[i]);
}
}
main.c
#include <stdio.h>
#include <stdlib.h>
#include "stack.h"
int main() {
Stack * stack = malloc(sizeof(Stack));
int i;
InitializeStack(stack, 1);
for (i = 0; i < 12; i++) {
Push(stack,i);
printf("Size of stack: %d, MaxSize: %d\n", Size_S(stack), stack -> MAXSTACKSIZE);
}
printf("Top element: %d\n", Top(stack));
PrintStack(stack);
puts("");
int popped = Pop(stack);
printf("Popped: %d\n", popped);
PrintStack(stack);
puts("");
//postfix test
char infix[30], postfix[30];
printf("Enter an infix expression(eg: 5+2*4): ");
gets(infix);
Convert(stack, infix, postfix);
printf("\nPostfix expression: %s", postfix);
return 0;
}
_and потом я получил их _ Те, кажется, не хватает из вашего вопроса «?». –