【问题标题】:Basic character counting in C [duplicate]C中的基本字符计数[重复]
【发布时间】:2017-07-28 09:28:00
【问题描述】:

无法获得实际计数,但我没有看到我做错了什么。

我输入一个单词,按回车,然后什么也没有发生,它继续运行。

int main(void)
{    
  double nc;

  for (nc = 0; getchar() != EOF; ++nc)
      ;
  printf ("%.0f\n", nc);
}

【问题讨论】:

  • 到底为什么要使用浮点数进行计数?
  • 我并不是建议你尽快把那本书扔掉,但无论如何你可能应该这样做。浮点数是不精确的,永远不应该用于计数。使用整数。至于您的问题,您必须按 ^D 关闭输入。
  • 您必须以 ENTER 后跟 ctrl-D 或两个 ctrl-d 的背靠背来结束输入。这类似于之前的问题。阅读那里的答案以了解一些背景。 stackoverflow.com/questions/27183865/getchar-eof
  • 有人向我推荐了这本书,因为我以前从未编写过代码,我想从一些基本的东西开始
  • 如果您希望代码在的末尾停止,请检测'\n'int ch; for (nc = 0; ((ch = getchar()) != EOF && ch != '\n'); ++nc) ;

标签: c character counting


【解决方案1】:

当从交互式控制台输入中读取时,getchar() 不会仅仅因为用户停止输入或按下回车键而返回 EOF,如有必要,它会等待用户在键盘上输入新内容。所以,for循环没有终止。

您必须使用特殊的组合键(取决于所使用的操作系统)来发出文件结束信号或检查其他输入以终止循环(例如行尾)

【讨论】:

  • 这不是真的。如果按 ^D(或 Mac 终端中的类似字符),则会生成 EOF 标记,getchar() 返回 EOF
  • @DYZ 回答澄清
  • 如果您在回答中提及触发EOF 的那些特殊组合键会更好,至少对于Linux 和Windows 而言。
【解决方案2】:

如前所述,在输入 ^D 之前,EOF 不会为真。终止,但还要检查换行符。在这里查看这个较旧的问题以获得一些好的背景: getchar() != EOF

这是使用整数编写的程序并检查换行符或EOF

// Customize AT_END Macro to return true based on some condition
#define AT_END(ch) (((ch)=='\n') || ((ch)==EOF)) 

int main(void)
{    
  int  inpChar = getchar();
  int  nc      = 0;

  while (!AT_END(inpChar)) {
      nc++;
      inpChar = getchar();
  };

  printf("Number of chars=%d\n", nc);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 2021-03-29
    • 2012-10-04
    • 1970-01-01
    • 2010-11-25
    • 2019-04-12
    相关资源
    最近更新 更多