0

そのため、無効な式 "..." Bus Error (core dumped) というメッセージが表示され続けます。ダンプ) メッセージ。これは私のコード全体です。助けていただければ幸いです。

#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;
}
4

1 に答える 1

0

gcc -Wall -ansi -pedantic

まず、おそらく static int を返すべきではありません。char または int または unsigned int のいずれかを返します。

次へ: 間違ったパラメータで関数を呼び出しています:

28行目:

push(atof(*argv));

これは、関数を定義した方法ではありません。

int push (int stack[max], int *top, int *data);

stack[max] の配列、int ポインター、および別の int ポインターが必要です。

float を渡すのは正しくありません。

実際には、すべての関数呼び出しのパラメーターが正しくないように見えます。

于 2015-03-09T02:00:18.040 に答える