Я пытаюсь создать программу для запуска вычислений в постфиксной нотации с использованием C и чтения значений из командной строки unix. Я, однако, новичок в языке C, и у меня есть некоторые проблемы с правильной работой. Я получаю показания NULL и Segmentation Faults, но я не совсем уверен, как работает отладка в командной строке unix, поэтому я не могу сказать вам, где я получаю ошибку. Буду признателен за любую помощь в этом вопросе.
#include <stdio.h>
double stack(int argc, char* argv[]);
int main(int argc, char* argv[]) {
double result;
result = stack(argc, argv);
printf("%s\n", result);
}
--
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
static double stck[100];
static int top = 0;
/*Push Function*/
static void push( double v){
stck[top] = v; /* Places the value at the current top position of the stack */
top++; /* Increases the top position of the stack */
printf("%s\n", top);
}
/*Pop Function*/
static double pop() {
double ret;
ret = stck[top]; /* Stores the value of the top position in the stack to ret */
top--; /* Decreases the top position of the stack */
printf("%s\n", top);
return ret; /* Returns the value of ret */
}
double stack(int argc, char* argv[]){
double h; /* Placeholder Variable for the result of the mathematic equations during the loop */
int i;
for (i = 0; i <= argc - 1; i++) { /* Loops to read in all values, barring the first, for argv */
if (strcmp(argv[i], "*") == 0) {
double a = pop(); /* Pulls in the top value of the stack */
double b = pop(); /* Pulls in the next top value of the stack*/
h = b*a; /* Performs the multiplication of the two stack values */
push(h); /* Returns the result to the top of the stack */
} else if (strcmp(argv[i], "+") == 0) {
printf("%s\n", "Made it here plus \0");
double a = pop(); /* Pulls in the top value of the stack */
double b = pop(); /* Pulls in the next top value of the stack*/
h = b+a; /* Performs the multiplication of the two stack values */
push(h); /* Returns the result to the top of the stack */
} else if (strcmp(argv[i], "/") == 0) {
double a = pop(); /* Pulls in the top value of the stack */
double b = pop(); /* Pulls in the next top value of the stack*/
h = b/a; /* Performs the division of the two stack values */
push(h); /* Returns the result to the top of the stack */
} else if (strcmp(argv[i], "^") == 0) {
double a = pop(); /* Pulls in the top value of the stack */
double b = pop(); /* Pulls in the next top value of the stack*/
h = pow(b,a); /* Raises the number b by the number a power */
push(h); /* Returns the result to the top of the stack */
} else if (strcmp(argv[i], "-") == 0) {
double a = pop(); /* Pulls in the top value of the stack */
double b = pop(); /* Pulls in the next top value of the stack*/
h = b-a; /* Performs the subtraction of the two stack values */
push(h); /* Returns the result to the top of the stack */
} else {
printf("%s\n", "Made it here \0");
double ph;
ph = (double)atof(argv[i]);
printf("%s\n", ph);
push(ph); /* Places the current value of argv[i] on the top of the stack */
}
}
return stck[0]; /* Returns the final result of the calculation to main.c */
}
top
определяется как целое число, вы должны напечатать его, используя спецификатор целочисленного формата дляprintf
;printf("%d\n", top);
- person Hunter McMillen   schedule 10.09.2013