为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C
yetShrimp 2017-10-21 20:51:17
#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()))就说触发断点了
查看完整描述

目前暂无任何回答

  • 0 回答
  • 0 关注
  • 1057 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信