c程序设计语言关于结构数组的问题,VS提示触发一个断点,请教大神哪里错了?谢谢啦

#include<stdio.h>
#include<string.h>
#include<ctype.h>
struct key {
 char *keyword;
 int count;
};
struct key tab[] = { { "art",0 },{ "hos",0 } ,{ "leg",0 },{ "lie",0 },{ "math",0 },{ "sci",0 } };
#define MAX 100
#define NKEYS (sizeof tab/sizeof (struct key))
int getword(char word[], int lim) {
 word[0]='v';
      char c;
 int getch(void);
 void ungetch(char);
 char w[MAX];

 int i = 0;
 int j;
 while (isspace(c = getch()));
 if (c != EOF)
  w[i++] = c;
 if (!isalpha(c)) {
  w[i] = '\0';
  return c;
 }
 for (j=0; --lim > 0; j++)
 {
  if (!isalpha(w[j++] = getch())) {
   ungetch(w[j-1]);
   break;
  }
 }
 word = w;
 return word[0];
}
int binsearch(char *word, struct key tab[], int n) {
 int cond, low, high, mid;
 low = 0;
 high = n - 1;

 while (low <= high) {
  mid = (low + high) / 2;
  if ((cond = strcmp(word, tab[mid].keyword)) < 0)
   high = mid - 1;
  else if (cond > 0)
   low = mid + 1;
  else
   return mid;
 }
 return -1;
}
void swap(int i, int j, struct key tab[]) {
 int temp;
 temp = tab[i].count;
 tab[i].count = tab[j].count;
 tab[j].count = temp;
}
void qsort(struct key tab[], int left, int right) {
 int i, last;
 last = left;
 i = left + 1;
 if (left >= right)
  return;
 swap(left, (left + right) / 2, tab);
 last = left;
 for (i = left + 1; i < right; i++) {
  if (tab[i].count < tab[left].count)
   swap(++last, i, tab);
 }
 swap(left, last, tab);
 qsort(tab, left, last - 1);
 qsort(tab, last + 1, right);
}
int main() {
 int n;

 char word[MAX] = "a";

 while (getword(word, MAX) != EOF) {
  if (isalpha(word[0]))
   if (n = binsearch(word, tab, NKEYS) >= 0)
    tab[n].count++;
 }
 for (n = 0; n < NKEYS; n++)
  printf("选择%s的人数为%d", tab[n].keyword, tab[n].count);
 qsort(tab, 0, NKEYS - 1);
 printf("人数最多的学院有%d人", tab[NKEYS - 1].count);
 system("pause");
 return 0;
}

调试的时候到getword函数的 if (!isalpha(w[j++] = getch()))就说触发断点了

yetShrimp
浏览 1058回答 0
0回答
打开App,查看更多内容
随时随地看视频慕课网APP