为什么会有这种错误??从来没见过。。
#include<stdio.h>#include<ctype.h>#include<stdlib.h>#include<string.h>#include"cslib.h"struct keytab{ int number; char *word;}keyword[]={0,"auto",0,"break",0,"float",0,"int"};#define NKEYS (sizeof keyword/sizeof keyword[0])#define MAXWORD 100int getword(char *s,int n);int binsearchchar(char *s,struct keytab*,int n);int getch1(void){ int c; return c=(buf>0)?val[--buf]:getchar();}void ungetch1(int c){ if(buf>1000) printf("too many characters"); else val[buf++]=c;}int main(){ int n; //记录找到的匹配的关键词的号码. char word[MAXWORD]; while((getword(word,MAXWORD))!=EOF){ if(isalpha(word[0])){ if((n=binsearchchar(word,keyword,NKEYS))>0){ keyword[n].number++; } } } for(n=0;n<NKEYS;n++) if(keyword[n].number>0) printf("%4d %s\n",keyword[n].number,keyword[n].word); return 0;}int binsearchchar(char *s,struct keytab keyword[],int n){ int mid,low=0,high=n-1; int cond=0; while(low<=high){ mid=(low+high)/2; if((cond=strcmp(s,keyword[mid].word))>0) low=mid+1; else if(cond<0) high=mid-1; else return mid; } return -1;}//n控制最大的单词读取数int getword(char *s,int n){ int c; char *w=s; while(isspace(c=getch1())) ; if(c!=EOF) *w++=c; if(!isalpha(c)){ *w='\0'; return c; } for(;n>0;n--) if(!isalpha(*w++=getch1())){ ungetch1(*w); break; } *w='\0'; return s[0];}