我正在使用 turbo C++,我的程序没有产生任何输出

Posted

技术标签:

【中文标题】我正在使用 turbo C++,我的程序没有产生任何输出【英文标题】:I am using turbo C++ and my program is producing no output 【发布时间】:2022-01-24 02:05:26 【问题描述】:

标题几乎说明了一切,所以这里是代码:

#include <stdio.h>

/* Program counts blanks, tabs, and newlines */
int main(void)

  int c;
  int b, t, nl;

  b = 0;
  t = 0;
  nl = 0;

  while ((c = getchar()) != EOF)
    if (c == ' ')
      ++b;
    if (c == '\t')
      ++t;
    if (c == '\n')
      ++nl;
  printf("Input has %d blanks, %d tabs, and %d newlines\n", b, t, nl);
  return 0;

我不明白为什么这不起作用。它计算空白没有问题,但是当涉及到其余部分时,它们的值总是打印为 0。

不仅仅是“应该是这样”的答案,我真的想要一个“它不起作用,因为......你需要这样做,因为......”请回答。我试图掌握概念并真正理解语言,而不仅仅是知道什么有效,什么无效。

谢谢!你们已经得到了很多帮助:)。

【问题讨论】:

【参考方案1】:

这是因为您的 while 循环缺少大括号。如果没有这些大括号,while 中唯一的内容就是第一个 if 语句。这就是为什么它只计算空白,因为你通过整个文件执行 one if 语句然后,在退出循环后,cEOF 所以其他两个都不是 @987654327 @ 语句将是正确的。

这是一个棘手的问题,很难看到,因为缩进看起来应该可以工作,但与 Python 不同,编译器不使用缩进来确定事物的位置:-)

如果您在while 之后放置一个左大括号,在printf 之前放置一个右大括号,它应该计算所有内容。

换句话说,这就是你的编译器看到的:

while ((c = getchar()) != EOF) 
    if (c == ' ')
        ++b;

if (c == '\t')
    ++t;
if (c == '\n')
    ++nl;

如果你想要:

while ((c = getchar()) != EOF) 
    if (c == ' ')
        ++b;
    if (c == '\t')
        ++t;
    if (c == '\n')
        ++nl;

【讨论】:

始终支持 while 和 if 是值得的,尤其是在第一次学习时 +1。这就是为什么,顺便说一句,人们应该始终使用大括号,即使它们不是必需的,这样就不会发生这种事情(为什么 K&R 允许无大括号变体?) 呃,我什至没有注意到... +1 给你 我们的编码标准总是要求大括号。 很棒的答案,谢谢!现在这一切都说得通了。是的,我认为 K&R 的书需要更新,它有点旧了 ;-)。【参考方案2】:

我在这里看到很多“总是需要大括号”。这很好,它会防止这种情况发生,但我倾向于总是使用一个好的编辑器。例如,Emacs 会自动缩进 C 代码以使这种事情非常明显。您的第二个和第三个 if 语句不会缩进。

如果您不喜欢大括号,另一种选择是在使用 if 的地方使用 else if。不要那样做,但要明白。

【讨论】:

以上是关于我正在使用 turbo C++,我的程序没有产生任何输出的主要内容,如果未能解决你的问题,请参考以下文章

libjpeg-turbo的压缩速度和我程序中的libjpeg没有区别

android studio NDK上的turbo c ++ graphics.h程序

来自 libjpeg-turbo-1.5.1-vc.exe 的 TurboJPEG API 产生错误的输出

在Turbo C ++程序中编译c-graphics时出错

构建遗留 Turbo C++ 代码

如何使用 libjpeg-turbo 解码 JPEG9 图像?