Вопрос Turbo C

#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. Та же формула будет применена к алфавитам. Предложение и слово будут представлять собой комбинацию алфавитов. Для того, чтобы начать в определенном порядке, мы должны считать так, без какой-либо путаницы.

Если мы вводим какую-либо фразу или что-либо еще, нам нужна переменная завершения, например , так как их не было в алфавитах. Чтобы рассчитать частоту, нам нужно увеличить количество.