gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:12:40 25 4
gpt4 key购买 nike

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com