2013-06-21 2 views
2

Я собираюсь использовать «Язык программирования C» на K & R. Я пытаюсь выполнить упражнение 1-13, чтобы получить гистограмму длины слова ввода. Вот что я пробовал. Я не получаю последнюю длину слова. Как это исправить?Упражнение на языке программирования C 1 - 13

#define space ' ' 
#define maxLength 100 
#include <stdio.h> 

int main() { 
    int c, result[maxLength], count, i, maxWordLength; 
    count = maxWordLength = 0; 
for (i = 0; i < maxLength; ++i) 
    result[i] = 0; 
    while ((c = getchar()) != '0') { 
    if (!((c == space) || (c == '\t') || (c == '\n'))) 
     ++count; 
    else { 
     ++result[count]; 
     if (count > maxWordLength) 
     maxWordLength = count; 
     count = 0; 
    } 
    } 
    for (i = 1; i <= maxWordLength; ++i) 
    printf("\n%d\t%d\n", i, result[i]); 
    return 0; 
} 

Ниже мой вход

1 12 
123 1234 12345 
1234560 

и выход идет как это, не давая последнее слово длины

1 1 

2 1 

3 1 

4 1 

5 1 

я понял, почему это произошло. Но как это исправить?

ответ

1

Когда вы достигнете 0, который завершает вход, вы просто выходите из цикла, не добавляя длину последнего слова на гистограмму. Возможное исправление добавления этого после цикла:

... 
} 
/* Take last word into account */ 
++result[count]; 
if (count > maxWordLength) 
maxWordLength = count; 

Это, конечно, в предположении, что 0 символ указывает на конец ввода, и не является частью данных.

+0

если размер последнего слова меньше, чем 'maxWordLenght'? – noufal

+0

Ах, правда, это должно быть «count», затем, исправлено. Если после последнего слова есть пробел, и до окончания «0» программа теперь увеличит счетчик для слов длиной 0, но это значение, которое вы не используете, поэтому это не имеет значения. – Joni

+0

и это тоже 'if (count> maxWordLength) maxWordLength = count;' right? – noufal

3
while ((c = getchar()) != '0') 

должен быть

while ((c = getchar()) != EOF) 

иначе ваша программа останавливается на первой 0 характера, например, в 1234560. И если последняя строка ввода не заканчивается символом новой строки, вы должны также учитывать это.

EOF возвращается в конец файла или возникает ошибка чтения.

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