사용자가 배열 번호와 영문자를 입력하는 프로그램을 작성하려고합니다. 그런 다음 프로그램이 배열을 읽습니다. 숫자가 표시되면 프로그램은 해당 숫자를 하나의 스택으로 밀어 넣어야합니다. 그러나 알파벳 문자가 있으면 푸시 된 마지막 번호가 나타납니다. 내가 22a
을 소개 출력 인 경우, 프로그램이 작동하지 않는 몇 가지 이유를 들어하나의 문자열에서 스택으로 푸시, 팝 및 디스플레이 기능을 사용합니다.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#define MAX 20
int top, i;
void push (double stack[], double x, int top)
{
stack[top] = x;
}
int pop (double stack[])
{
double x;
stack [top]=x;
return x;
}
void display (double stack[],int top)
{
int i;
printf ("\n The stack is: ");
for (i=0; i<=top; i++)
{
printf ("%lf\n",stack[i]);
}
}
void main()
{
int r;
int stack[10];
char array[10];
printf("introduce the numbers");
fgets(array,MAX,stdin);
int l;
r=strlen(array);
top=0;
for (l=0;l<=r;l++)
{
int n;
if (isdigit(array[l]))
{
push(stack,array[l],top);
top=top+1;
}
if (islower(array[l]))
{
pop(stack);
printf("you have popped %d", n);
top=top-1;
}
}
display(stack,top);
}
:
you have popped 4194432 The stack is: 50.00000 50.00000
내가 특히 관심이 어떻게해야
은 지금까지 나는이 코드를 가지고 팝을 쓰고,이 프로그램이 작동하도록 푸시하고 표시하십시오. 내가 어떻게 해?
내가 C로 프로그래밍하고
주셔서 감사합니다
을'# MAX 20'을 크기 10의 배열로 정의하십시오. 또한 루프에'for (l = 0; l <= r; l ++)'이 있습니다. 'l == r'이라면'stack [l]'에 접근하려고 시도 할 때 segfault가된다. – ForceBru
더 많은 것은, 당신은'pop (stack)'을 호출하고 return value_ (!)를 사용하지 않음을 알기 때문에, 초기화되지 않은 변수'n'가 유용한 값을 가질 것이라고 생각하게하는 이유는 무엇입니까? – ForceBru
루핑 할 때마다'for (i = 0; i <= threshold; i ++)'를합니다. 이것은 이해가되지 않습니다. 배열에서'treshold + 1' 값을 얻으려고합니다. 확실히 그들 중 단지 '임계 값'만을 원한다. – ForceBru