为什么这个C程序的输出坚持?

时间:2015-02-20 08:17:41

标签: c search binary

我正在尝试创建一个计算输入中存在的关键字数量的程序,类似于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行,按下输入没有任何反应。无论是输入更多数据还是输出都没有。请帮我弄清楚是什么问题。

1 个答案:

答案 0 :(得分:0)

谢谢大家。我发现了什么问题。实际上在binsearch函数中我在while循环之外定义了mid =(min + max)/ 2。