【发布时间】:2014-08-21 14:46:51
【问题描述】:
我的代码的目标相对简单,它接受命令行参数并相应地放置堆栈。
命令行参数:“2 2 +”
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct stack {
int top;
int items[100];
} stack;
void initializeStack(stack* p);
void push(stack* p, int val);
int pop(stack* p);
int main(int argc, char** argv) {
int i, a, b;
int val = 0;
stack ph;
initializeStack(&ph);
for(i=1; i<argc; i++) {
if(strcmp(argv[i], "*") == 0) {
a = pop(&ph);
b = pop(&ph);
val = a*b;
push(&ph, val);
}
else if(strcmp(argv[i], "/") == 0) {
a = pop(&ph);
b = pop(&ph);
val = b/a;
push(&ph, val);
}
else if(strcmp(argv[i], "+") == 0) {
a = pop(&ph);
printf("%d\n", a);
b = pop(&ph);
printf("%d\n", b);
val = a+b;
push(&ph, val);
}
else if(strcmp(argv[i], "-") == 0) {
a = pop(&ph);
b = pop(&ph);
val = b-a;
push(&ph, val);
}
else if(strcmp(argv[i], "^") == 0) {
a = pop(&ph);
b = pop(&ph);
val = pow(b,a);
push(&ph, val);
}
else if(strcmp(argv[i], "%") == 0) {
a = pop(&ph);
b = pop(&ph);
val = b%a;
push(&ph, val);
}
else {
push(&ph, argv[i]);
}
}
printf("%d\n", pop(&ph));
return 0;
}
void initializeStack(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;
}
我已经在我的 else if 语句中添加了 printf 语句以进行添加以及最后的 pop,但是如果我运行,我会得到以下输出:
6956340 6956337 13912677
这让我相信它打印的是内存地址,而不是传入的实际值。
编写代码的正确方法是什么,以便如果“2 2 +”是我的代码参数,答案将是 4,或者我当前的 printf 语句将变为“2 2 4”?
【问题讨论】:
-
第一步:编译时启用警告。 这一点怎么强调都不过分。编译器会告诉你,你将
char*粘贴到int中。
标签: c stack command-line-arguments postfix-notation