Я пытаюсь сделать программу, которая подсчитывает количество ключевых слов, присутствующих на входе аналогично на примере 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-ю строку и при нажатии на ввод ничего не происходит. Ни одно из данных не может быть введено, ни выход. Пожалуйста, помогите мне выяснить, что не так.
Изменить ''% s count =% d "' to '"% s count =% d \ n "'. – dasblinkenlight
Что такое 'char buffer [400];' используется в этом коде? –