Hello folks,
I have started to write this simple program that reads from keyboard, stores the on tags (aka <html>) into a 2-D array, and stores the off-tags (aka. </html>) into another. then print out both arrays (stacks).
The code contains 4 functions plus main function. two push functions, and 2 write tags functions.
I am having a problem with storing / printing the OFF-TAGS of the original string.
Could someone help me out in this asap :)
Code:#include <stdio.h>
#define B_OPEN '<'
#define B_CLOSE '>'
#define BRACKET_MAX 10
#define B_CHAR_MAX 7
char bracket[BRACKET_MAX][B_CHAR_MAX]={0};
char close[BRACKET_MAX][B_CHAR_MAX]={0};
int diagnosis=0;
signed char bracket_nr, close_nr = 0;
char close_char, c, bracket_char = 0;
/******************** Prototypes ***********************/
/********************************************************/
/********************************************************/
int push (void);
int writetags (void);
int push2(void);
int writetags2 (void);
/******************** Main ***********************/
/********************************************************/
/********************************************************/
int main (void){
char c=0;
bracket_nr=-1;
close_nr=-1;
diagnosis=0;
while((c=getchar())!=EOF && c!='\n'){
if(c==B_OPEN){
if (c=='/'){diagnosis=push2();} //
else if (c!='/') {diagnosis=push();}
}
switch (diagnosis){
case -3:
printf("infinate bracket.\n");
break;
case -5:
printf("Too Large Bracket.\n");
break;
case -7:
printf("Too many bracket.\n");
break;
};
if (diagnosis < 0)
break;
};
if(diagnosis==0){
printf("No brackets.\n");
}else if (diagnosis > 0){
printf("You have written %d brackets; they are:\n",diagnosis);
writetags();
writetags2();
}else{
printf("Text contains errors.\n");
};
system ("PAUSE");
return diagnosis;
};
/******************** Push Function**********************/
/********************************************************/
/********************************************************/
int push (void){
char c = 0;
char bracket_char =0;
c=getchar();
bracket_nr++;
if(bracket_nr>=BRACKET_MAX)
return (diagnosis = -7); //to many tags
diagnosis=bracket_nr+1;
for(bracket_char=0;c!=EOF && c!='\n' && c!=B_CLOSE && bracket_char<B_CHAR_MAX;bracket_char++, c=getchar()){
//record tag name into the stack bracket
bracket[bracket_nr][bracket_char]=c;
};
bracket[bracket_nr][bracket_char]='\0';
if(c==B_CLOSE){
return diagnosis;
}else if (bracket_char>=B_CHAR_MAX){
return(diagnosis=-5);
}else if (c==EOF || c=='\n')
return (diagnosis=-3);
return diagnosis;
};
/******************** Push2 Function**********************/
/********************************************************/
/********************************************************/
int push2 (void){
char c =0;
char close_char =0;
c=getchar();
close_nr++;
if(close_nr>=BRACKET_MAX)
return (diagnosis = -7); //to many tags
diagnosis=close_nr+1;
for(close_char=0;c!=EOF && c!='\n' && c!=B_CLOSE && close_char<B_CHAR_MAX;close_char++, c=getchar()){
//record tag name into the stack bracket
close[close_nr][close_char]=c;
};
close[close_nr][close_char]='\0';
if(c==B_CLOSE){
return diagnosis;
}else if (close_char>=B_CHAR_MAX){
return(diagnosis=-5);
}else if (c==EOF || c=='\n')
return (diagnosis=-3);
return diagnosis;
};
/******************** writetags function ***************/
/********************************************************/
/********************************************************/
int writetags (void) {
printf("The opening tags are:\n");
for(;bracket_nr>=0; bracket_nr--){
for(bracket_char=0; bracket[bracket_nr][bracket_char]!='\0'; bracket_char++){
putchar(bracket[bracket_nr][bracket_char]);
}
putchar('\n');
}
return 0;
};
/******************** writetags2 function ***************/
/********************************************************/
/********************************************************/
int writetags2 (void) {
printf("And the Closing Tags are:\n");
for(;close_nr>=0; close_nr--){
for(close_char=0; close[close_nr][close_char]!='\0'; close_char++){
putchar(close[close_nr][close_char]);
}
putchar('\n');
}
};