i've been working on this program forever! now i'm stuck and going
insane because i keep getting a syntax error msg and i just can't see
what the compiler is signaling to! -
#include <stdio.h>
-
#include <stdlib.h>
-
#include <string.h>
-
#include <ctype.h>
-
-
/* constants */
-
#define TRUE 1
-
#define FALSE 0
-
-
/* structure for stack */
-
typedef struct
-
{
-
char data[40]; /* array to hold stack contents */
-
int tos; /* top of the stack pointer */
-
}
-
STACK;
-
-
/* function prototypes */
-
void initStack(STACK *stack);
-
void get_infix(char infix[]);
-
void convertToPostfix(char infix[], char postfix[]);
-
int isOperator(char c);
-
int precedence(char operator1, char operator2);
-
int pred_level(char ch);
-
void push(STACK *stack, char value);
-
char pop(STACK *stack);
-
char stackTop(STACK *stack);
-
int isEmpty(STACK *stack);
-
int isFull(STACK *stack);
-
void printResult(char infix[], char postfix[]);
-
void print_msg(void);
-
-
/* program entry point */
-
int main()
-
{
-
char infix[40], postfix[40]="";
-
-
/* convert from infix to postfix main function */
-
convertToPostfix(infix, postfix);
-
/* display the postfix equivalent */
-
infix[strlen(infix)-2] = '\0';
-
printResult(infix, postfix);
-
-
return EXIT_SUCCESS;
-
}
-
-
/* initalise the stack */
-
void initStack(STACK *stack)
-
{
-
stack->tos = -1; /* stack is initially empty */
-
}
-
-
/* get infix expression from user */
-
void get_infix(char infix[])
-
{
-
int i;
-
-
printf("Enter infix expression: ");
-
fflush(stdin);
-
-
for ( i=0; i<40; )
-
{
-
if ( (infix[i] = getchar()) == '\n' )
-
{
-
i++;
-
break;
-
}
-
else if ( !(isspace(infix[i])) )
-
i++;
-
}
-
-
infix[i] = '\0';
-
}
-
-
/* convert the infix expression to postfix notation */
-
void convertToPostfix(char infix[], char postfix[])
-
{
-
int i, length;
-
int j=0;
-
char tos_ch;
-
STACK stack;
-
-
initStack(&stack); /* initialise stack */
-
get_infix(infix); /* get infix expression from user */
-
length = strlen(infix);
-
-
if ( length )
-
{
-
push(&stack, '(');
-
strcat(infix, ")");
-
length++;
-
-
for ( i=0; i<length; i++ )
-
{
-
/* if current operator in infix is digit */
-
if ( isdigit(infix[i]) )
-
{
-
postfix[j++] = infix[i];
-
}
-
/* if current operator in infix is left parenthesis */
-
else if ( infix[i] == '(' )
-
{
-
push(&stack, '(');
-
}
-
/* if current operator in infix is operator */
-
else if ( isOperator(infix[i]) )
-
{
-
while ( TRUE )
-
{
-
/* get tos */
-
tos_ch = stackTop(&stack);
-
-
/* no stack left */
-
if ( tos_ch == '\0' )
-
{
-
printf("\nFull Stack!\n");
-
print_msg();
-
exit(1);
-
}
-
else
-
{
-
if ( isOperator(tos_ch) )
-
{
-
if ( pred_level(tos_ch) >=
-
pred_level(infix[i]) )
-
postfix[j++] = pop(&stack);
-
else
-
break;
-
}
-
else
-
break;
-
}
-
}
-
push(&stack, infix[i]);
-
}
-
/* if current operator in infix is right parenthesis */
-
else if ( infix[i] == ')' )
-
{
-
while ( TRUE )
-
{
-
/* get tos */
-
tos_ch = stackTop(&stack);
-
-
/* no stack left */
-
if ( tos_ch == '\0' )
-
{
-
printf("\nFull Stack!\n");
-
print_msg();
-
exit(1);
-
}
-
else
-
{
-
if ( tos_ch != '(' )
-
{
-
postfix[j++] = tos_ch;
-
pop(&stack);
-
}
-
else
-
{
-
pop(&stack);
-
break;
-
}
-
}
-
}
-
continue;
-
}
-
}
-
}
-
-
postfix[j] = '\0';
-
}
-
-
/* determine if c is an operator */
-
switch (c) {
-
case '+':
-
return TRUE;
-
break;
-
case '-':
-
return TRUE;
-
break;
-
case '*':
-
return TRUE;
-
break;
-
case '/':
-
return TRUE;
-
break;
-
default:
-
return FALSE;
-
break;
-
/*if ( c == '+' || c == '-' || c == '*' ||
-
c == '/' || c == '%' || c == '^' )
-
{
-
return TRUE;
-
}
-
else
-
return FALSE; */
-
}
-
-
/* determine precedence level */
-
int pred_level(char ch)
-
{
-
if ( ch == '+' || ch == '-' )
-
return 1;
-
else
-
return 2;
-
}
-
-
/* determine if the precedence of operator1 is less than,
-
equal to, greater than the precedence of operator2 */
-
int precedence(char operator1, char operator2)
-
{
-
if ( pred_level(operator1) > pred_level(operator2) )
-
return 1;
-
else if ( pred_level(operator1) < pred_level(operator2) )
-
return -1;
-
else
-
return 0;
-
}
-
-
/* push a value on the stack */
-
void push(STACK *stack, char value)
-
{
-
if ( !(isFull(stack)) )
-
{
-
(stack->tos)++;
-
stack->data[stack->tos] = value;
-
}
-
}
-
-
/* pop a value off the stack */
-
char pop(STACK *stack)
-
{
-
char ch;
-
-
if ( !(isEmpty(stack)) )
-
{
-
ch = stack->data[stack->tos];
-
(stack->tos)--;
-
return ch;
-
}
-
else
-
return '\0';
-
}
-
-
/* return the top value of the stack without popping the stack */
-
char stackTop(STACK *stack)
-
{
-
if ( !(isEmpty(stack)) )
-
return stack->data[stack->tos];
-
else
-
return '\0';
-
}
-
-
/* determine if stack is empty */
-
int isEmpty(STACK *stack)
-
{
-
/* empty */
-
if ( stack->tos == -1 )
-
return TRUE;
-
/* not empty */
-
else
-
return FALSE;
-
}
-
-
/* determine if stack is full */
-
int isFull(STACK *stack)
-
{
-
/* full */
-
if ( stack->tos == 19 )
-
return TRUE;
-
/* not full */
-
else
-
return FALSE;
-
}
-
-
/* display the result postfix expression */
-
void printResult(char infix[], char postfix[])
-
{
-
/*system("cls");*/
-
printf("\n\n");
-
printf("Infix notation: %d%s\n", infix);
-
printf("Postfix notation: %d%s\n\n", postfix);
-
print_msg();
-
}
-
-
/* print exit message */
-
void print_msg(void)
-
{
-
printf("Hit <RETURN> to exit...");
-
fflush(stdin);
-
getchar();
-
}
-
the error msg i get is: syntax error before "switch"
i don't get it :S ... any suggestions? 19 11278
ok i finally fixed the error!!! but the program outputs operators and
numbers, no variables
for example: if i input a*b+c*d/2 , it gives **2/+
so what now?
caramel wrote: the error msg i get is: syntax error before "switch"
i don't get it :S ... any suggestions?
Which function is the switch statement supposed to be in?
--
pete
pete wrote: caramel wrote:
the error msg i get is: syntax error before "switch"
i don't get it :S ... any suggestions?
Which function is the switch statement supposed to be in?
--
the switch is in void convertToPostfix(char infix[], char postfix[])
what i want to know is where is 'c'. i've attempted to trace the
program state and can't find out where it is. You don't seem to pass it
as an argument. Also flushing stdin causes undefined behaviour, take
that out.
bitshadow wrote: pete wrote: caramel wrote:
the error msg i get is: syntax error before "switch"
i don't get it :S ... any suggestions?
Which function is the switch statement supposed to be in?
-- the switch is in void convertToPostfix(char infix[], char postfix[]) what i want to know is where is 'c'.
Maybe that's where it's supposed to be,
which is what I asked, but that's not where it is.
I'd like to see an example of the output is supposed to be
for a given input.
--
pete
pete wrote: bitshadow wrote: pete wrote: caramel wrote:
> the error msg i get is: syntax error before "switch" > > i don't get it :S ... any suggestions?
Which function is the switch statement supposed to be in?
-- the switch is in void convertToPostfix(char infix[], char postfix[]) what i want to know is where is 'c'.
Maybe that's where it's supposed to be, which is what I asked, but that's not where it is.
I think the switch is supposed to be in isOperator().
Where isOperator is, I don't know.
--
pete
well i fixed the switch, now i need to get it to print variables
it works as intended with numbers and operators, but for some reason it
does not print the variables entered to the console
caramel wrote: well i fixed the switch, now i need to get it to print variables
it works as intended with numbers and operators, but for some reason it does not print the variables entered to the console
Probably has something to do with the current state of your code.
--
pete
true, i was wondering if anyone can point out any mistake(s) or suggest
a fragment of code i can insert to display variables
On 18 Nov 2005 15:42:10 -0800, "caramel" <es********@gmail.com> wrote: i've been working on this program forever! now i'm stuck and going insane because i keep getting a syntax error msg and i just can't see what the compiler is signaling to!
snip/* convert the infix expression to postfix notation */ void convertToPostfix(char infix[], char postfix[])
You did an excellent job of lining up all your braces.
{
snip if ( length ) {
snip for ( i=0; i<length; i++ ) {
snip if ( isdigit(infix[i]) ) {
snip }
snip else if ( infix[i] == '(' ) {
snip }
snip else if ( isOperator(infix[i]) ) { while ( TRUE ) {
snip if ( tos_ch == '\0' ) {
snip } else { if ( isOperator(tos_ch) ) { if ( pred_level(tos_ch) >= pred_level(infix[i]) )
snip else
snip } else
snip } }
snip }
snip else if ( infix[i] == ')' ) { while ( TRUE ) {
snip if ( tos_ch == '\0' ) {
snip } else { if ( tos_ch != '(' ) {
snip } else {
snip } } }
snip } } }
snip}
This brace ends the function. /* determine if c is an operator */ switch (c) {
You cannot put a switch statement (or most other statements) outside
of a function.
snip
<<Remove the del for email>>
the brace after (c) ?
and thanks for the compliment, i am a neat freak ;)
but u guys the program works fine now, and i get no more error msgs,
just that one problem that it drops out the variables and only displays
numbers and operators... how do i fix that?
caramel wrote: the brace after (c) ?
and thanks for the compliment, i am a neat freak ;)
but u guys the program works fine now, and i get no more error msgs, just that one problem that it drops out the variables and only displays numbers and operators... how do i fix that?
In your for loop in convertToPostfix, you checked for:
1. isdigit
2. the opening bracket '('
3. isOperator
4. the closing bracket ')'
but ignored everything else. That's why you keep droping variables. I
suggest that after the last else if put an else to accept everything
else as variables. If you want to restrict variables to alphabets then
check for isAnAcceptableVariable.
thanks for the input, i'll go through with that and see what happens
many thanks and much appreciation to all who shared their thoughts :)
"caramel" <es********@gmail.com> writes: the brace after (c) ?
and thanks for the compliment, i am a neat freak ;)
but u guys the program works fine now, and i get no more error msgs, just that one problem that it drops out the variables and only displays numbers and operators... how do i fix that?
Some suggestions on posting style:
Don't assume your readers can see the article to which you're
replying. You need to provide some context. Google makes it
unecessarily difficult to do this, but there is a workaround (which
has been posted here over 1000 times):
If you want to post a followup via groups.google.com, don't use
the broken "Reply" link at the bottom of the article. Click on
"show options" at the top of the article, then click on the
"Reply" at the bottom of the article headers.
Also, please don't use abbreviations like "u" for "you". They just
make your text more difficult to read. Proper capitalization is also
helpful.
--
Keith Thompson (The_Other_Keith) ks***@mib.org <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
In article <ln************@nuthaus.mib.org>,
Keith Thompson <ks***@mib.org> wrote:
.... Don't assume your readers can see the article to which you're replying. You need to provide some context. Google makes it unecessarily difficult to do this, but there is a workaround (which has been posted here over 1000 times):
If you want to post a followup via groups.google.com, don't use the broken "Reply" link at the bottom of the article. Click on "show options" at the top of the article, then click on the "Reply" at the bottom of the article headers.
You are wasting your breath. They'll never get it. And I'll tell you why.
Imagine that there's a mouse - and the mouse is the Usenet. You and I can
see that it is a mouse and we behave accordingly. But now there is a class
of users (we'll call them "googlers") that are wearing these funny weird
glasses that make them see not a mouse, but an elephant. Seeing an
elephant (i.e., the Usenet as a web page), they also behave accordingly.
And no amount of verbiage from us is going to convince them that it's not
an elephant - that it is only a mouse.
To make this more clear, to a googler, it doesn't make any sense to "quote"
(whatever the heck that is...), in fact, to do so would be absurd, when all
the rest of the articles in the thread are right there in front of their
faces (just as clear as the trunk on that mouse, er, elephant). And no
amount of verbiage from us is going to convince them not to believe what
they see. The point is you can *never* convince someone that what they see
isn't reality. The only way you can address the problem is to help them
fix their eyesight (or help them remove their funny glasses).
Also, please don't use abbreviations like "u" for "you". They just make your text more difficult to read. Proper capitalization is also helpful.
Good advice. tnk u.
Kenny McCormack wrote: In article <ln************@nuthaus.mib.org>, Keith Thompson <ks***@mib.org> wrote: ...Don't assume your readers can see the article to which you're replying. You need to provide some context. Google makes it unecessarily difficult to do this, but there is a workaround (which has been posted here over 1000 times):
If you want to post a followup via groups.google.com, don't use the broken "Reply" link at the bottom of the article. Click on "show options" at the top of the article, then click on the "Reply" at the bottom of the article headers.
You are wasting your breath. They'll never get it. And I'll tell you why.
Imagine that there's a mouse - and the mouse is the Usenet. You and I can see that it is a mouse and we behave accordingly. But now there is a class of users (we'll call them "googlers") that are wearing these funny weird glasses that make them see not a mouse, but an elephant. Seeing an elephant (i.e., the Usenet as a web page), they also behave accordingly. And no amount of verbiage from us is going to convince them that it's not an elephant - that it is only a mouse.
To make this more clear, to a googler, it doesn't make any sense to "quote" (whatever the heck that is...), in fact, to do so would be absurd, when all the rest of the articles in the thread are right there in front of their faces (just as clear as the trunk on that mouse, er, elephant). And no amount of verbiage from us is going to convince them not to believe what they see. The point is you can *never* convince someone that what they see isn't reality. The only way you can address the problem is to help them fix their eyesight (or help them remove their funny glasses).
Also, please don't use abbreviations like "u" for "you". They just make your text more difficult to read. Proper capitalization is also helpful.
Good advice. tnk u.
Hmmm, well yes, you're right. I thought this Google board thing works
like normal forums do. Guess I was wrong! I still don't really
understand why you can't refer to previous posts, but nonetheless I
will do my best to adhere to your rules. Sorry for any inconvenience!
On 19 Nov 2005 08:02:01 -0800, in comp.lang.c , "caramel"
<es********@gmail.com> wrote: Hmmm, well yes, you're right. I thought this Google board thing works like normal forums do.
Google doesn't work like anything. Its a web interface to usenet, and
the majority of people reading usenet do not use google, but proper
newsreaders which display the information in a very different format.
I still don't really understand why you can't refer to previous posts,
Because the servers other people are getting the posts from may not
carry all the old messages, or the reader may not want to have to
fetch additional material, or may be on dialup where every second
downloading costs money.
Another way to think about this: each message you send is a sort of
email, sent to dozens, possibly thousands of people who are reading
the newsgroup. You can't realistically expect them all to have kept
all the email they recieved, just in case they needed to refer back to
it.
but nonetheless I will do my best to adhere to your rules.
Thanks
--
Mark McIntyre
CLC FAQ <http://www.eskimo.com/~scs/C-faq/top.html>
CLC readme: <http://www.ungerhu.com/jxh/clc.welcome.txt>
----== Posted via Newsfeeds.Com - Unlimited-Unrestricted-Secure Usenet News==---- http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+ Newsgroups
----= East and West-Coast Server Farms - Total Privacy via Encryption =----
"caramel" <es********@gmail.com> writes:
[...] Hmmm, well yes, you're right. I thought this Google board thing works like normal forums do. Guess I was wrong! I still don't really understand why you can't refer to previous posts, but nonetheless I will do my best to adhere to your rules. Sorry for any inconvenience!
Google Groups is an interface to Usenet, a system that has been in
existence for decades longer than Google has. Unfortunately, the
folks at Google screwed up the interface, making things difficult for
those of us who use other interfaces. Our attempts to get them to fix
there broken interface have so far been unsuccessful.
(Incidentally, Kenny McCormack is a self-proclaimed troll. Please
ignore him.)
--
Keith Thompson (The_Other_Keith) ks***@mib.org <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
In article <ln************@nuthaus.mib.org>,
Keith Thompson <ks***@mib.org> wrote:
.... (Incidentally, Kenny McCormack is a self-proclaimed troll. Please ignore him.)
But at least he knows how to spell 'their' - as in 'their interface'.
"Keith Thompson" <ks***@mib.org> wrote in message
news:ln************@nuthaus.mib.org... "caramel" <es********@gmail.com> writes: [...] Hmmm, well yes, you're right. I thought this Google board thing works like normal forums do. Guess I was wrong! I still don't really understand why you can't refer to previous posts, but nonetheless I will do my best to adhere to your rules. Sorry for any inconvenience! Google Groups is an interface to Usenet, a system that has been in existence for decades longer than Google has. Unfortunately, the folks at Google screwed up the interface, making things difficult for those of us who use other interfaces. Our attempts to get them to fix there broken interface have so far been unsuccessful.
(Incidentally, Kenny McCormack is a self-proclaimed troll. Please ignore him.)
-- Keith Thompson (The_Other_Keith) ks***@mib.org
<http://www.ghoti.net/~kst> San Diego Supercomputer Center <*>
<http://users.sdsc.edu/~kst> We must do something. This is something. Therefore, we must do this.
And I thought I was the only one who thinks Kenny McCormack is an asswipe. This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: KidLogik |
last post by:
Hello!
I am converting an infix expression string into a postfix so that I
will be able to evaluate it easier ->
(5*(((9+8)*(4*6))+7)) == 598+46**7+*
I believe the rule is "Replace all...
|
by: Tony Johansson |
last post by:
Hello Experts!
I'm reading i a book about C++ and they mention infix with telling what it
is.
I hope you out there can do so.
Many thanks!
//Tony
|
by: stesia |
last post by:
which is the programm of converting infix to postfix in c++ by using stacks?
please help me...
|
by: Xah Lee |
last post by:
The Concepts and Confusions of Prefix, Infix, Postfix and Fully
Functional Notations
Xah Lee, 2006-03-15
In LISP languages, they use a notation like “(+ 1 2)” to mean “1+2”....
|
by: ostorat_elwafa2 |
last post by:
program that uses a stack to convert a given infix expression to a
postfix expression and then to evaluate it.
program should first check if the infix expression entered has
balanced brackets ( ...
|
by: jackikay |
last post by:
how do i write a program that converts infix to postfix.?
|
by: jimmuel001 |
last post by:
pls help me fo my assignment that will allow the user to input infinite equations in infix type. and will output in postfix.
thanks!
|
by: aitia |
last post by:
this the code. i used ECLIPSE to run this.. it has some codes smells that i can't seem to figure out.. can any one help?
import java.io.*;
import java.util.*;
public class Postfix
{
private...
|
by: zeroeight |
last post by:
Hi guys,
I'm a newbie here, I just want to seek for help regarding my program. I want to implement an infix to postfix conversion only accepting numbers. Right now, I already debugged the errors...
|
by: emmanuelkatto |
last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud.
Please let me know.
Thanks!
Emmanuel
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
by: Sonnysonu |
last post by:
This is the data of csv file
1 2 3
1 2 3
1 2 3
1 2 3
2 3
2 3
3
the lengths should be different i have to store the data by column-wise with in the specific length.
suppose the i have to...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development projectplanning, coding, testing,...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
| |