我正在尝试创建一个计算输入中存在的关键字数量的程序,类似于6.3节结构数组中Dennis Ritchie的C编程语言示例的例子。这是我的代码 -
#include <stdio.h>
#include <ctype.h>
#include <string.h>
int binsearch(char *s, struct key mt[], int lim);
int getch(void);
void ungetch(int );
int getword(char *word, int lim);
struct key{
int count;
char *word;
}keys[] = { { 0, "break" }, { 0, "int" }, { 0, "return" } };
int main()
{
int n;
char word[20];
while (getword(word, 20) != EOF)
if (isalpha(word[0]))
if ((n = binsearch(word, keys, 3)) >= 0)
keys[n].count++;
for (n = 0; n < 3; n++)
if (keys[n].count>0)
printf("%s count=%d", keys[n].word, keys[n].count);
return 0;
}
int getword (char *word, int lim)
{
int c;
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];
}
char buffer[400];
int t = 0;
int getch(void)
{
return ((t == 0) ? getchar() : buffer[--t]);
}
void ungetch(int c)
{
buffer[t++] = c;
}
int binsearch(char *s, struct key mt[], int lim)
{
int cond;
int min = 0;
int max = lim - 1;
int mid = (min + max) / 2;
while (min <= max)
{
if ((cond = strcmp(s, mt[mid].word)) > 0)
min = mid + 1;
else if (cond < 0)
max = mid - 1;
else
return mid;
}
return -1;
}
在Visual Studio Express 2013中编译此代码时,输出终端只接受第1行,按下输入没有任何反应。无论是输入更多数据还是输出都没有。请帮我弄清楚是什么问题。
答案 0 :(得分:0)
谢谢大家。我发现了什么问题。实际上在binsearch函数中我在while循环之外定义了mid =(min + max)/ 2。