Turbo C Вопрос
Здравствуйте, я использую Turbo C... У меня просто какой-то запрос, я нашел код TC в книге, но меня не устраивает данное разъяснение. Вот код:
main()
{
int count = -1; /* why it was initialized as -1? */
char ch;
printf("Type in a phrase:\n");
ch = 'a'; /* why it was initialized as 'a'? */
while (ch != '\r') /* perform while ch is not equal to return */
{
ch = getche();
count++; /* increment the count */
}
printf("\nCharacter count is %d", count); /* prints the value of count */
}
Заранее спасибо!
3 ответа
Предположим, что ваш пользователь вводит "abc" и нажимает enter, поэтому входной буфер содержит "a", "b", "c", "/r" (этот последний символ представляет возврат). В буфере 4 символа, но ваш пользователь действительно набрал только 3 (один был возвращен), поэтому вам нужно вычесть один из числа. Или, в качестве альтернативы, начните счет с -1, а не 0.
Вы могли бы думать об этом так - сколько раз это проходит цикл?
- Отсчет начинается с -1.
- Первый раз: прочитать "а" из строки. Обойдите снова, так как это не '/r'. количество теперь 0.
- Второй раз: прочитайте "b" из строки. Обойдите снова, так как это не '/r'. количество теперь 1.
- В третий раз: прочитайте "c" из строки. Обойдите снова, так как это не '/r'. количество теперь 2.
- Четвертый раз: прочитайте '/r' из строки и остановитесь. количество теперь 3.
Что касается вашего второго пункта, это не имеет значения, для чего инициализируется ch, если это не '\r'. Это означает, что вы попадете в цикл хотя бы один раз и прочитаете символы.
int count = -1; \* why it was initialized as -1? *\
Мне кажется, что он считает символы в строке, исключая последний символ возврата каретки. Вот почему он начинается с -1, поэтому символ '\r' не будет учитываться.
ch = 'a'; \* why it was initialized as 'a'? *\
Просто так состояние в while
цикл будет изначально верным. Можно было выбрать что угодно, лишь бы это не было '\r', так как тогда условие было бы немедленно ложным, и никакие символы не были бы прочитаны.
В первом вопросе значение счета можно запустить в любом случае. Не обязательно начинать только с -1.
Они просто сделали это для собственного удобства. Мы просто хотим посчитать числа от 1 до 0. Та же самая формула будет применена к алфавитам. Предложение и слово будут комбинацией алфавитов. Для того, чтобы начать в определенном порядке, мы должны считать это без каких-либо путаницы.
Если мы вводим какую-либо фразу или что-то еще, нам нужна переменная завершения, такая как \0, так как они не присутствуют в алфавитах. Чтобы вычислить частоту, нам нужно увеличить счетчик.