#c #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 */
}
Заранее спасибо!
Комментарии:
1. Код в этой книге просто ужасен. Что это такое?
2. Из любопытства; на какой ОС вы используете Turbo C? В последний раз я использовал Turbo C в 80-х годах. 🙂
3. Вы пробовали запустить программу и записали, что
Character count is
происходит, когда вы вводите 1,2,3 или n символов? И обратите внимание, что*
это не комментарий. Многострочный комментарий на языке Си начинается с прямой косой черты, такой как/*
. Кроме того, ваш комментарийI'm not satisfied with the given clarification
действительно не выражает никаких намерений. В чем заключается ваш вопрос?4. Кстати, именно из-за этого уродливого
ch = 'a'
назначенияdo while
и существуют циклы.5. Мое праздное любопытство, но как именно в книге объясняется этот фрагмент кода? Почему вас это не устраивает?
Ответ №1:
Предположим, ваш пользователь вводит «abc» и нажимает enter, поэтому буфер ввода содержит «a», «b», «c», «/r » (этот последний символ представляет возврат). В буфере есть 4 символа, но ваш пользователь действительно ввел только 3 (один был возвращен), поэтому вам нужно вычесть один из числа. Или, в качестве альтернативы, начните отсчет с -1, а не с 0.
Вы могли бы подумать об этом так — сколько раз это повторяется?
- Отсчет начинается с -1.
- Первый раз: прочитайте «а» из строки. Повторите круг, так как это не «/r». количество теперь равно 0.
- Второй раз: прочитайте «b» из строки. Пройдите еще раз, так как это не «/r». Количество теперь равно 1.
- Третий раз: прочитайте «c» из строки. Пройдите еще раз, так как это не «/r». Количество теперь равно 2.
- Четвертый раз: прочитайте «/r» из строки и остановитесь. счет теперь 3.
По вашему второму пункту, на самом деле не имеет значения, для чего инициализируется ch, если это не «r». Это означает, что вы хотя бы один раз войдете в цикл и прочтете символы.
Комментарии:
1. Это было для меня большим подспорьем… Огромное спасибо!
Ответ №2:
int count = -1; * why it was initialized as -1? *
Мне кажется, что это подсчет символов в строке, исключая последний символ «возврат каретки». Вот почему он начинается с -1 — так что символ «r » не будет частью счета.
ch = 'a'; * why it was initialized as 'a'? *
Просто так условие в while
цикле будет изначально истинным. Можно было выбрать что угодно, только бы это не было «r», так как тогда условие сразу же стало бы ложным и никакие символы не были бы прочитаны.
Ответ №3:
В первом вопросе значение счетчика может быть введено в любом случае. Необязательно начинать только с -1.
Они просто сделали это для собственного удобства. Мы просто хотим посчитать числа от 1 до 0. Та же формула будет применена к алфавитам. Предложение и слово будут представлять собой комбинацию алфавитов. Для того, чтобы начать в определенном порядке, мы должны считать так, без какой-либо путаницы.
Если мы вводим какую-либо фразу или что-либо еще, нам нужна переменная завершения, например , так как их не было в алфавитах. Чтобы рассчитать частоту, нам нужно увеличить количество.