我正在跟着一本关于C的书来学习它,我正在编写书中的所有代码,最后一个与数组有关的应该是说有多少个空格,标签等等。但是当我执行它时,没有任何显示,它只是空白,因为在我可以输入内容然后按回车并且没有任何反应,它是否应该告诉我每件东西有多少?
我太新了,无法理解这个程序是否实际上应该输出任何东西所以我想我会在这里发布并得到一个意见,它编译并运行良好,没有错误,但书中的那种指的是它输出东西,但是当我运行它并输入内容时没有任何反应,可以永远打字。
这是代码
#include <stdio.h>
int main()
{
int c, i, nwhite, nother;
int ndigit[10];
nwhite = nother = 0;
for (i = 0; i < 10; ++i)
ndigit[i] = 0;
while ((c = getchar()) != EOF)
if (c >= '0' && c <= '9')
++ndigit[c-'0'];
else if (c == ' ' || c == '\n' || c == '\t')
++nwhite;
else
++nother;
printf("digits =");
for (i = 0; i < 10; ++i)
printf(" %d", ndigit[1]);
printf(", white space = %d, other = %d\n", nwhite, nother);
}
答案 0 :(得分:1)
应用程序输入一些值,然后计算位数(0-9)和空格。中断循环的关键组合不是ENTER,而是Linux中的EOF CRTL-D ,而WINDOWS中的EOF是 CTRL-Z 。
然后,在你的应用程序中有一个错误:
for (i = 0; i < 10; ++i)
printf(" %d", ndigit[1]);
为了显示这个数字应该是:
for (i = 0; i < 10; ++i)
printf(" %d", ndigit[i]);
不幸的是,在使用scanf(),getchar(),fgets()等时,获取交互式输入是非常有问题的。这就是为什么大多数人通常编写自己的自定义函数,通常从stdin获取整行然后根据它解析它满足他们的需求。但是,如果要使用ENTER来停止循环,可以按如下方式修改代码,但是您将无法计算输入中新行的数量。
#include <stdio.h>
int main(void)
{
int c, i, nwhite, nother;
int ndigit[10];
nwhite = nother = 0;
for (i = 0; i < 10; ++i)
ndigit[i] = 0;
while ((c = getchar()) != '\n')
if (c >= '0' && c <= '9')
++ndigit[c-'0'];
else if (c == ' ' || c == '\n' || c == '\t')
++nwhite;
else
++nother;
printf("digits =");
for (i = 0; i < 10; ++i)
printf(" %d", ndigit[i]);
printf(", white space = %d, other = %d\n", nwhite, nother);
return 0;
}
这应该按预期工作。但是,你应该考虑写一个更好的输入函数,网上有几个有趣的解决方案。
编辑
main()必须返回int。不是空虚,不是布尔,不是浮动。 INT。只是int,只有int,只有int。有些编译器接受void main(),但这是非标准的,不应该使用。
点击此处查看一些示例:http://www.parashift.com/c++-faq-lite/main-returns-int.html
答案 1 :(得分:0)
您可以使用以下
提供EOFWINDOWS:
Press F6 then ENTER
or
Ctrl+Z
LINUX:
Ctrl+D
答案 2 :(得分:0)
更改
printf(" %d", ndigit[1]);
到
printf(" %d", ndigit[i]);
按ctrl + d在输入值
后给出EOF输入:
2 4 6 8 //3 white space + 1 new line = 4 white space
[ctrl + d]
输出:
digits = 0 0 1 0 1 0 1 0 1 0, white space = 4, other =0