Turbo C问题

时间:2011-05-14 08:50:29

标签: 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 */

}

提前致谢!

3 个答案:

答案 0 :(得分:2)

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

你可以这样想一想 - 这次循环有多少次?

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

关于你的第二点,只要它不是'\ r',ch初始化为什么并不重要。这意味着你至少会进入循环一次,然后读入字符。

答案 1 :(得分:2)

 int count = -1;                \* why it was initialized as -1? *\

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

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

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

答案 2 :(得分:0)

在第一个问题中,无论如何都可以开始计数值。仅以-1开始并非必须。

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

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