首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Turbo C问题

Turbo C问题
EN

Stack Overflow用户
提问于 2011-05-14 16:50:29
回答 3查看 666关注 0票数 0

你好,我使用的是TurboC语言...我只是有一些疑问,我在一本书中找到了TC的代码,但我对给定的澄清不满意。代码如下:

代码语言:javascript
运行
复制
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 */

}

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-14 16:55:38

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

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2011-05-14 16:56:22

代码语言:javascript
运行
复制
 int count = -1;                \* why it was initialized as -1? *\

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

代码语言:javascript
运行
复制
 ch = 'a';                      \* why it was initialized as 'a'? *\

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

票数 2
EN

Stack Overflow用户

发布于 2015-11-07 18:34:32

在第一个问题中,可以以任何方式启动count value。不强制只以-1开头。

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6000757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档