현재 구조체 배우는 중인대요. 책보고 키워드 검색 프로그램을 짜봣습니다.
근대 첨보는 에러 메세지가 2개 떠버려서, 머리를 암만 굴려도 해결을 못하고 있습니다. 고수님들
에러좀 잡아주세요 ^_^;;(tc3.0)
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stddef.h>
#define NKEYS(sizeof keytab / sizeof keytab[0])
#define MAXWORD 100
struct key
{
char *word;
int count;
}
keytab[]=
{
"auto",0,
"break",0,
"case",0,
"char",0,
"const",0,
"contnue",0,
"default",0,
"unsigned",0,
"void",0,
"volatile",0,
"while",0,
};
main()
{
char word[MAXWORD];
int n;
while (getword(word,MAXWORD)!=EOF)
if(isalpha(word[0]))
if((n=binsearch(word,keytab,NKEYS))>=0)
keytab[n].count++;
for (n=0;n<NKEYS;n++)
if(keytab[n].count>0)
printf("%4d %s\n",keytab[n].count,keytab[n].word);
return 0;
}
int binsearch(char *word,struct key *tab,int n)
{
int cond;
int low,high,mid;
low=0;
high=n-1;
while(low<high)
{
mid=(high-low)/2;
if ((cond=strcmp(word,tab[mid].word))<0)
high=mid-1;
else if (cond>0)
low=mid+1;
else
return mid;
}
return -1;
}
int getword(char *word,int lim)
{
int c,getch(void);
void ungetch(int);
char *w=word;
while(isspace(c=getch()))
;
if (c!=EOF)
*w++=c;
if (!isalpha(c))
{
*w='\0';
return c;
}
for (;--lim>0;w++)
if(!isalnum(*w=getch()))
{
ungetch(*w);
break;
}
*w='\0';
return word[0];
}
#define BUFSIZE 100
char buf[BUFSIZE];
int bufp=0;
int getch(void)
{
return (bufp>0)?buf[--bufp]:getchar();
}
void ungetch(int c)
{
if(bufp>=BUFSIZE)
printf("ungetch:too many character\n");
else
buf[bufp++]=c;
}
|