[英]I am using turbo C++ and my program is producing no output
标题几乎说明了一切,所以这里是代码:
#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
语句。 这就是为什么它是只计算空白,因为你经历了整个文件做一个 if
声明的话,退出循环后, c
是EOF
所以其他两个既不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;
}
我在这里看到很多“总是需要大括号”。 这很好,它会阻止这种情况发生,但我倾向于总是使用一个好的编辑器。 例如,Emacs会自动缩进C代码,使这种事情变得非常明显。 你的第二和第三个if
语句不会缩进。
如果您不喜欢大括号,另一种选择是使用else if
您使用if
。 不要这样做,但要明白它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.