【发布时间】:2019-04-01 23:38:30
【问题描述】:
我的代码接受 1 个命令行参数,它逐个字符地读取命令行并相应地放置堆栈。
命令行参数:“12+”应该等于等式“1+2”
int pop(stack *p);
int main(int argc, char **argv)
{
stack ph;
int i, a, b;
int val = 0;
if (argc!=2)
{
printf("Usage: %s argument\n", argv[0]);
exit(1);
}
else{
int i;
int length = strlen(argv[1]);
int count;
initializedStack(&ph);
for(i=0;i<length;i++)
{
if (argv[1][i] == '+'){
a = pop(&ph);
printf("%d\n", a);
b = pop(&ph);
printf("%d\n", b);
val = a+b;
push(&ph,val);
}
else{
push(&ph, argv[1][i]);
}
}
printf("%d\n", pop(&ph));
}
return 0;
}
void initializedStack(stack *p){
p->top = 0;
}
void push(stack *p, int val){
p->top++;
p->items[p->top] = val;
}
int pop(stack *p){
int y;
y = p->items[p->top];
p->items[p->top] = 0;
(p->top)--;
return y;
}
我目前处于程序的测试阶段,它只包括加法操作。为了测试这个程序,我为 if 语句的加法部分打印了语句,并在最后弹出。运行它会给我以下输出:
50
49
99
什么时候输出应该是:
1
2
3
加法操作好像有效,但不知道50和49是从哪里来的?编写代码以提供准确输出的正确方法是什么?谢谢!
【问题讨论】:
标签: c stack printf command-line-arguments