c - 我正在使用 Turbo C++,但我的程序没有产生任何输出

标签 c

标题已经说明了一切,下面是代码:

#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。

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

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

最佳答案

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

这是一个棘手的问题,很难看出来,因为缩进看起来应该可以工作,但是与 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;
}

关于c - 我正在使用 Turbo C++,但我的程序没有产生任何输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3305274/

相关文章:

c - 将数字放入 int 但不求和

c - 在 Visual Studio 2013 中调用 malloc 时 64 位编译器生成的奇怪代码

php - php 中的哪个位置实现了 `socket_connect` 迭代为给定主机名返回的多个 IP 地址?

c# - mono_field_set_value 不起作用

c - 关于c指针的问题

c - 5 年后 - NXP ADC 无法正常工作

c - STM32同一条EXTI线上的多个中断

c - 在 C 中使用 'const',可能会导致什么移植问题?

c - 如何将 c 代码 fread 转换为 vb.net

c - OpenMP 运行时看不到我的 GPU 设备