gpt4 book ai didi

c - C中的Postfix Notation计算程序,有一些问题

转载 作者:太空宇宙 更新时间:2023-11-03 23:29:46 24 4
gpt4 key购买 nike

我正在尝试创建一个程序来使用 C 以后缀表示法运行计算,并从 unix 命令行读取值。然而,我对 C 语言还很陌生,并且在让事情正常工作方面遇到了一些麻烦。我得到了 NULL 和段错误的读数,但我不太确定调试在 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 */


}

最佳答案

您的推送和弹出操作需要完全相反。

所以如果推送是

stackarray[index] = v
index++ //increment last

流行一定是

index--     //decrement first
return stackarray[index]

否则,pop 将始终返回最近推送的值之后一个槽中的值。


调试使用命令行参数的程序应该与调试任何其他程序没有太大区别。但是您可能需要阅读调试器的文档以了解如何将参数传递给程序。在 gdb 中:

gdb> break main
gdb> run arg1 arg2 arg3 ...

也就是说,将参数添加到 run 行,就好像 run 是程序的名称一样。

关于c - C中的Postfix Notation计算程序,有一些问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18723154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com