2015-02-20 2 views
1

Я пытаюсь сделать программу, которая подсчитывает количество ключевых слов, присутствующих на входе аналогично на примере C примера языка программирования Деннис Ритчи в разделе 6.3 Массивы Structures.Here мой код-Почему выход этой программы 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-ю строку и при нажатии на ввод ничего не происходит. Ни одно из данных не может быть введено, ни выход. Пожалуйста, помогите мне выяснить, что не так.

+2

Изменить ''% s count =% d "' to '"% s count =% d \ n "'. – dasblinkenlight

+0

Что такое 'char buffer [400];' используется в этом коде? –

ответ

0

Спасибо всем. Я нашел, в чем проблема. Фактически в функции binsearch я определил mid = (min + max)/2 вне цикла while.

Смежные вопросы