Я очень новичок в программировании в целом, поэтому, пожалуйста, несите мою нехватку знаний.Что это за последние строки кода, выполняемые в упражнении 1-13 языка программирования C & R?
Я провел пару часов в упражнении 1-13. Наконец я решил найти ответ, который я нашел по этой ссылке https://github.com/ccpalettes/the-c-programming-language-second-edition-solutions/blob/master/Chapter1/Exercise%201-13/word_length.c.
Поскольку я не хотел полностью копировать его ради изучения, я попытался понять код, а затем переделать его. (Это привело к почти полной копии, но я понимаю, это лучше, чем я бы в противном случае.)
Это то, что я до сих пор:
#include <stdio.h>
#define IN 1
#define OUT 0
#define LARGEST 10
main()
{
int c, state, l, i, j;
int length[LARGEST + 1];
for (i = 0; i <= LARGEST; ++i)
length[i] = 0;
state = OUT;
while ((c = getchar()) != EOF) {
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
if (state == OUT) {
l = 0;
state = IN;
}
++l;
}
else
if (state == IN) {
if (l <= LARGEST)
++length[l - 1];
//minus 1 because the nth term of an array is actually array[n-1]
else //if (l > LARGEST)
++length[LARGEST];
state = OUT;
}
if (c == EOF)
break;
}
for (i = 0; i <= LARGEST; ++i) {
if (i != LARGEST) //because array[10] refers to the 11th spot
printf("\t %2d |", i + 1); //plus one because 1st is array [0]
//this actually results in 1-10 because the 0-9 plus one makes the highest 10
else
printf("\t>%2d |", LARGEST);
for (j = 0; j < length[i]; ++j)
putchar('x');
putchar('\n');
}
return 0;
}
Пожалуйста, игнорируйте мои комментарии. Они были предназначены для меня, чтобы я мог объяснить программу себе.
Я имею два вопроса, которые я просто не могу понять, и они меня с ума:
Выход всегда приходится на одно слово меньше, чем на входе, что означает «мое имя не боб»приводит:
... 2 |xx 3 |x 4 |x ...
Кроме того, я не понимаю, что происходит в конце программы. В частности, я не понимаю, почему здесь переменная
j
используется:for (j = 0; j < length[i]; ++j) putchar('x');
Большое спасибо за вашу помощь, и мне очень жаль, если это слишком начинающему для сообщества.
Для вашего вопроса # 2 это то, что печатает 'x' и' xx' в вашем примере вывода. Это не сложно понять - посмотрите, что говорит 'putchar()' output ('x'), и посмотрите на свой вывод, чтобы увидеть, где появляется' x'. На вопрос №1 вы пытались использовать отладчик для выполнения кода, чтобы узнать, что он делает, и где это происходит неправильно? –
Для вопроса # 1 - в качестве альтернативы использованию отладчика попробуйте добавить дополнительные инструкции 'printf' для регистрации состояния переменных в разных точках вашего кода. Затем вы можете сравнить результат с ожиданием того, как код должен работать. Это может быть чрезвычайно эффективным инструментом для отладки кода. – James
'j' - простой целочисленный счетчик, который повторяется от' 0 до 'length [i]' раз, увеличивая ('++ j') каждый раз через цикл. Это основной синтаксис цикла for. На первом проходе 'j == 0', на следующем проходе' j == 1', на следующем проходе 'j == 2' и т. Д. До' j == length [i] ', при котором точка останавливается. Просмотрите свои уроки по циклам, особенно 'for'. –