Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Sign In with Facebook Sign In with Google Sign In with OpenID

Categories

We have migrated to a new platform! Please note that you will need to reset your password to log in (your credentials are still in-tact though). Please contact lee@programmersheaven.com if you have questions.
Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

Compiler Error in example code for structures not understood

jchavanjchavan Posts: 3Member
I was attempting to solve a problem from K&R c programming exercise 6-1.

This code was posted as a solution however it has a compile time error at line 5 in the code below:(I am using Dev Cpp)

Can anyone please explain why this error is occurring?
_________________________________________________________
struct key {
char *word;
int count;
};
key keytab[] = {
"auto", 0,
"break", 0,
"case", 0,
"char", 0,
"const", 0,
"continue", 0,
"default", 0,
"do", 0,
"double", 0,
"else", 0,
"enum", 0,
"extern", 0,
"float", 0,
"for", 0,
"goto", 0,
"if", 0,
"int", 0,
"long", 0,
"register", 0,
"return", 0,
"short", 0,
"signed", 0,
"sizeof", 0,
"static", 0,
"struct", 0,
"switch", 0,
"typedef", 0,
"union", 0,
"unsigned", 0,
"void", 0,
"volatile", 0,
"while" , 0,
};

int getword(char *word, int lim);
int binsearch(key keytab[], char *word, int nkeys);

#define MAXWORD 100
#define NKEYS (sizeof keytab / sizeof(key))

#include
#include
int main(int argc, char *argv[])
{
char word[MAXWORD];
int index;

while(getword(word, MAXWORD) != EOF)
if(isalpha(word[0]))
if((index = binsearch(keytab, word, NKEYS)) >= 0)
keytab[index].count++;

int i;
for(i = 0; i < NKEYS; i++)
if(keytab[i].count > 0)
printf("%4d %s
", keytab[i].count, keytab[i].word);

getchar();
return 0;
}

int binsearch(key keytab[], char *word, int nkeys)
{
int low, high, mid;

int tmp;
low = 0;
high = nkeys - 1;
while(low <= high) {
mid = (low + high) / 2;
if((tmp = strcmp(word, keytab[mid].word)) < 0)
high = mid - 1;
else if(tmp > 0)
low = mid + 1;
else
return mid;
}
return -1;
}

int getword(char *word, int lim)
{
int c;
char *w = word;

int getch();
void ungetch(int c);

while((c = getch()) == ' ' || c == ' ')
;

if(!isalpha(c)) {
if(c == '"') { /* double quotes */
while((c = getch()) != '"' && c != EOF && c != '
')
if(c == '\') {
if((c = getch()) == EOF)
return EOF;
}
if(c == EOF)
return EOF;
} else if(c == '/') { /* comments */
if((c = getch()) == EOF)
return EOF;

if(c == '/') { /* // comments */
while((c = getch()) != EOF && c != '
')
;
return c;
} else if(c != '*') {
ungetch(c);
return '/';
}

while((c = getch()) != EOF) /* /* comments*/
if(c == '*') {
if((c = getch()) == EOF)
return EOF;
if(c == '/')
return c;
}
if(c == EOF)
return EOF;
} else if(c == '#') {
while((c = getch()) != EOF && c != '
')
if(c == '\') {
if((c = getch()) == EOF)
return EOF;
}
if(c == EOF)
return EOF;
}
*w++ = c;
*w = '';
return c;
} else
*w++ = c;

while(--lim > 0) {
if(!isalpha(*w = getch())) { /* in case of EOF or " or / etc */
ungetch(*w);
break;
}
w++;
}
*w = '';
return word[0];
}


int buffered = 0;
int buf = EOF;

int getch()
{
if(buffered) {
buffered = 0;
int temp = buf;
buf = EOF;
return temp;
}

return getchar();
}

void ungetch(int c)
{
buf = c;
buffered = 1;
}

Comments

Sign In or Register to comment.