涡轮增压器C问题

涡轮增压器C问题,c,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 initializ

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

}

提前谢谢

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

你可以这样想——这个循环要经过多少次

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

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

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

 int count = -1;                \* why it was initialized as -1? *\
你可以这样想——这个循环要经过多少次

  • 计数从-1开始
  • 第一次:从字符串中读取“a”。再绕一圈,因为它不是'/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”,就可以选择任何内容,因为条件会立即为false,并且不会读取任何字符

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

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

正因为如此,
while
循环中的条件最初是真的。只要不是'\r',就可以选择任何内容,因为条件会立即为false,并且不会读取任何字符。

在第一个问题中,无论如何都可以在中启动计数值。仅以-1开头不是强制性的

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


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

在第一个问题中,无论如何都可以启动计数值。仅以-1开头不是强制性的

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


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

那本书中的代码非常糟糕。是哪一个?出于好奇;您在哪个操作系统上运行Turbo C?我上一次使用Turbo C是在80年代。:)您是否尝试过运行该程序,并记下键入1、2、3或n个字符时的
字符计数是多少?请注意,
\*
不是注释。C中的多行注释以正斜杠开头,如
/*
。另外,您的评论
我对给出的澄清不满意
实际上没有传达任何意图。你的问题是什么?顺便说一句,这个难看的
ch='a'
作业就是为什么
存在而
循环存在的原因。我的好奇心很低,但这本书对这段代码有什么解释呢?你为什么不满意呢?那本书中的代码非常糟糕。是哪一个?出于好奇;您在哪个操作系统上运行Turbo C?我上一次使用Turbo C是在80年代。:)您是否尝试过运行该程序,并记下键入1、2、3或n个字符时的
字符计数是多少?请注意,
\*
不是注释。C中的多行注释以正斜杠开头,如
/*
。另外,您的评论
我对给出的澄清不满意
实际上没有传达任何意图。你的问题是什么?顺便说一句,这个难看的
ch='a'
作业就是为什么
存在而
循环存在的原因。我的好奇心很低,但这本书对这段代码有什么解释呢?你为什么不满意?这对我很有帮助。。。谢谢你!这对我帮助很大。。。谢谢你!