Премини към съдържанието
lorda97

Малко помощ за C

Препоръчан отговор


Здравейте, значи имам една програма за домашно, чието условие е: Напишете програма expr, която изчислява израз, подаден от командния ред, по метода на обратния полски калкулатор. Всеки оператор или операнд се приема за отделен елемент. 

вход: ./expr 2 3 4 + x 

изход: 14

Ето докъде съм стигнал: 

#include <stdio.h>#include <stdlib.h>#include <ctype.h>#define MAXVAL 100 int x,y;int sp = 0;double val[MAXVAL];void push(double f){	if (sp < MAXVAL)		val[sp++] = f;	else		printf("error: stack full, can't push %gn", f);}double pop(void){	if (sp > 0)		return val[--sp];	else 	{		printf("error: stack emptyn");		return 0.0;	}}int stepen(int x, int y){	if (x == 0)		return 0;	else if (y == 0)		return 1;	else		return (x * stepen(x, y - 1));}int main(int argc, char* argv[]){	int i;	double op2;	i = 1;	while (i <= argc)	{			if (*(argv[i]) >= '0' && *(argv[i]) <= '9')			{				push(atof(argv[i]));			}			if (*argv[i] == '+')			{				push(pop() + pop());			}			if (*argv[i] == 'x')			{				push(pop() * pop());			}			if (*argv[i] == '-')			{				op2 = pop();				push(pop() - op2);			}			if (*argv[i] == '/')			{				op2 = pop();				if (op2 != 0.0)					push(pop() / op2);				else					printf("error: zero divisonn");			}			if (*argv[i] == '^')			{				y = pop();				x = pop();				push(stepen(x,y));			}			if (*argv[i] == '%')			{				y = pop();				x = pop();				push(x % y);				}			i++;	}	printf("%fn", pop());	return 0;}

Програмата се компилира, но като я пусна ми дава Segmentation fault, и понеже не съм много в час със заделянето на памет(отскоро програмирам) незнам точно как да я оправя. Пробвах се да заделя с malloc, но нещо не стана.

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Бъркаш индексирането на аргументите, трябва да е:

....    i = 0;    while (i < argc).... 
  • Харесва ми 2

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

ол да бе вярно, мерси много :)

Редактирано от lorda97 (преглед на промените)

Сподели този отговор


Линк към този отговор
Сподели в други сайтове

Регистрирайте се или влезете в профила си за да коментирате

Трябва да имате регистрация за да може да коментирате това

Регистрирайте се

Създайте нова регистрация в нашия форум. Лесно е!

Нова регистрация

Вход

Имате регистрация? Влезте от тук.

Вход

×

Информация

Поставихме бисквитки на устройството ви за най-добро потребителско изживяване. Можете да промените настройките си за бисквитки, или в противен случай приемаме, че сте съгласни с нашите условия за ползване.