Hi,
here is the final code, but the 'compare' function doesn't seem to work. Can someone please help me in this.
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}; //THE OPENING BRACKETS ARRAY
char close[BRACKET_MAX][B_CHAR_MAX]={0}; //THE CLOSING BRACKETS ARRAY
int diagnosis, diag=0; // INTEGER VALUES TO COUNT THE BRACKET NUMBERS IN BOTH ARRAYS
signed char bracket_nr, close_nr = 0; //ROW COUNT FOR BOTH ARRAYS
char close_char, c, bracket_char = 0; //COLUMN COUNT FOR BOTH ARRAYS
/******************** Prototypes ***********************/
/********************************************************/
/********************************************************/
int push (char c); //TO PUSH TO THE OPENING BRACKETS ARRAY
int push2(char c);//TO PUSH TO THE CLOSING BRACKETS ARRAY
int writetags (void); //TO POP FROM THE OPENING BRACKETS ARRAY
int writetags2 (void); //TO POP FROM THE CLOSING BRACKETS ARRAY
int compare(void); //TO COMPARE BOTH ARRAYS
/******************** 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){
c=getchar();
if (c=='/'){diagnosis=push2(c);} // THIS TO SEPARATE OPENING FROM CLOSING ARRAYS
else diag=push(c);
}
switch (diagnosis+diag){
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+diag) < 0)
break;
};
if((diagnosis+diag)==0){
printf("No brackets.\n");
}else if ((diagnosis+diag) > 0){
printf("****************************************\n");
printf("You have written %d brackets; they are:\n",(diagnosis+diag));
writetags();
writetags2();
compare();
if(diagnosis==diag) {printf("\nYou have the correct number of brackets in your HTML text.\n\n");}
else if (diagnosis>diag){printf("\nOne or more of the OPENING tags is missing: %d tag(s)\n ", diagnosis-diag);}
else if (diagnosis<diag){printf("\nOne or more of the CLOSING tags is missing: %d tag(s)\n ", diag-diagnosis);}
}else{
printf("Text contains errors.\n");
};
system ("PAUSE");
return (diagnosis+diag);
};
/******************** Push Function**********************/
/********************************************************/
/********************************************************/
int push (char c1){
//char c1 = 0;
char bracket_char =0;
//c1=getchar();
bracket_nr++;
if(bracket_nr>=BRACKET_MAX)
return (diag = -7); //to many tags
diagnosis=bracket_nr+1;
for(bracket_char=0;c1!=EOF && c1!='\n' && c1!=B_CLOSE && bracket_char<B_CHAR_MAX;bracket_char++, c1=getchar()){
//record tag name into the stack bracket
bracket[bracket_nr][bracket_char]=c1;
};
bracket[bracket_nr][bracket_char]='\0';
if(c1==B_CLOSE){
return diagnosis;
}else if (bracket_char>=B_CHAR_MAX){
return(diagnosis=-5);
}else if (c1==EOF || c=='\n')
return (diagnosis=-3);
return diagnosis;
};
/******************** Push2 Function**********************/
/********************************************************/
/********************************************************/
int push2 (char c2){
//char c =0;
char close_char =0;
c2=getchar(); //it removes the '/' from the closing tag.
close_nr++;
if(close_nr>=BRACKET_MAX)
return (diagnosis = -7); //to many tags
diagnosis=close_nr+1;
for(close_char=0;c2!=EOF && c2!='\n' && c2!=B_CLOSE && close_char<B_CHAR_MAX;close_char++, c2=getchar()){
//record tag name into the stack bracket
close[close_nr][close_char]=c2;
};
close[close_nr][close_char]='\0';
if(c2==B_CLOSE){
return diagnosis;
}else if (close_char>=B_CHAR_MAX){
return(diagnosis=-5);
}else if (c2==EOF || c=='\n')
return (diagnosis=-3);
return diagnosis;
};
/******************** writetags function ***************/
/********************************************************/
/********************************************************/
int writetags (void) {
printf("\nThe 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("\nAnd 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');
}
return 0;
};
/******************** Compare function ***************/
/********************************************************/
/********************************************************/
int compare(void){
for (;bracket_nr>=0;bracket_nr--){
for (close_nr=0;;close_nr++){
}
if (bracket[bracket_nr][bracket_char]!=close[close_nr][close_char]){
printf("this tag is incorrect: ");
printf("%c%c",bracket[bracket_nr][bracket_char], close[close_nr][close_char]);
putchar('\n');}
}
return 0;
}