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, так как они не присутствуют в алфавитах. Чтобы вычислить частоту, нам нужно увеличить счетчик.

Другие вопросы по тегам