所以我不断收到消息无效的表达" ..."如果我键入./rpcalc" ...&#34 ;,总线错误(核心转储)如果我只是输入命令行./rpcalc 1我得到分段错误(核心转储)消息。这是我的完整代码,我将不胜感激。
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define max 10
#define NUMBER 'n'
int main(int argc, char *argv[])
{
double tmp;
char c;
if(argc <= 1) {
fprintf(stderr,"invalid call\n");
return 1;
}
while(--argc)
{
c = getop(*++argv);
switch(c)
{
case NUMBER:
push(atof(*argv));
break;
case '+':
push(pop() + pop());
break;
case '-':
tmp = pop();
push(pop() - tmp);
break;
case '*':
push(pop() * pop());
break;
case '/':
tmp = pop();
if(!tmp){
printf("can't divide by 0\n");
}
else{
push(pop()/tmp);
}
break;
default:
printf("invalid expression %s\n", *argv);
}
}
printf("%g\n",pop());
return 0;
}
int push (int stack[max], int *top, int *data)
{
if(*top == max -1)
return(-1);
else
{
*top = *top +1;
stack[*top] = *data;
return(1);
}
}
int pop(int stack[max], int *top, int *data)
{
if(*top == -1)
return(-1);
else
{
*data = stack[*top];
*top = *top - 1;
return(1);
}
}
static int isNumber(const char *s){
if(*s == '-' || *s == '+') s++;
if(*s == '\0'){
return 0;
}
while (isdigit(*s)) s++;
if(*s == 'e' || *s == 'E'){
s++;
while(isdigit(*s)) s++;
}
return *s == '\0';
}
int getop(const char *op){
return isNumber(op) ? NUMBER : *op;
}
答案 0 :(得分:0)
gcc -Wall -ansi -pedantic
首先,你可能不应该返回一个静态int。返回char或int或unsigned int。
下一步:您正在调用参数不正确的函数:
第28行:
push(atof(*argv));
这不是您定义功能的方式。
int push (int stack[max], int *top, int *data);
它需要一个stack [max]数组,一个int指针和另一个int指针
传递浮动不正确。
实际上看起来几乎所有的函数调用都有不正确的参数。