0

您好,我正在使用 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 */

}

提前致谢!

4

3 回答 3

2

假设您的用户输入“abc”并按下回车键,因此输入缓冲区包含“a”、“b”、“c”、“/r”(最后一个字符表示返回)。缓冲区中有 4 个字符,但您的用户实际上只输入了 3 个(返回一个),因此您需要从计数中减去一个。或者,或者,从 -1 而不是 0 开始计数。

你可以这样想——这循环了多少次?

  • 计数从 -1 开始。
  • 第一次:从字符串中读取“a”。再转一圈,因为它不是'/ r'。现在计数为 0。
  • 第二次:从字符串中读取 'b'。再转一圈,因为它不是'/ r'。现在计数为 1。
  • 第三次:从字符串中读取 'c'。再转一圈,因为它不是'/ r'。现在计数为 2。
  • 第四次:从字符串中读取'/r',然后停止。现在计数为 3。

在您的第二点上, ch 初始化为什么并不重要,只要它不是'\ r'。这意味着您将至少进入循环一次,并读入字符。

于 2011-05-14T08:55:37.810 回答
2
 int count = -1;                \* why it was initialized as -1? *\

在我看来,它好像在计算一行中的字符,不包括最后的“回车”字符。这就是它从 -1 开始的原因 - 这样 '\r' 字符就不会成为计数的一部分。

 ch = 'a';                      \* why it was initialized as 'a'? *\

就这样while循环中的条件最初为真。任何东西都可以被选择,只要它不是'\r',那么条件就会立即为假并且不会读取任何字符。

于 2011-05-14T08:56:21.757 回答
0

在第一个问题中,无论如何都可以开始计数值。不强制只以 -1 开头。

他们这样做只是为了自己的方便。我们只想从 1 或 0 开始计算数字。相同的公式将应用于字母表。句子和单词将是字母的组合。为了以特定的顺序开始,我们应该这样计算而不会造成任何混淆。

如果我们键入任何短语或其他任何内容,我们需要一个终止变量,如 \0,因为它们不存在于字母表中。为了计算频率,我们需要增加计数。

于 2015-11-07T10:34:32.367 回答