K&;中与基本getchar()相关的函数;遥控书不起作用? #包括 main() { 双数控; 对于(nc=0;getchar()!=EOF;++nc); printf(“%1d\n”,nc); }
这是我第一次学习C语言,有一些事情我似乎不太了解。for循环有一个相当简单的结构,唯一的约束是如果K&;中与基本getchar()相关的函数;遥控书不起作用? #包括 main() { 双数控; 对于(nc=0;getchar()!=EOF;++nc); printf(“%1d\n”,nc); },c,eof,stdio,C,Eof,Stdio,这是我第一次学习C语言,有一些事情我似乎不太了解。for循环有一个相当简单的结构,唯一的约束是如果getchar不等于EOF(无论EOF设置为什么值)。每次getchar不等于EOF,nc都会递增。最后,我们将nc调整为字符串的长度,从而退出for循环 但是,该程序只接受输入,不显示应与字符长度关联的值。 我不明白什么?我假设这本书比我更有可能是对的,所以我想我在某个地方出错了。你有三种可能的选择 将double更改为int 将printf()中的%d“更改为%lf” 将nc转换为int如下(i
getchar
不等于EOF
(无论EOF
设置为什么值)。每次getchar
不等于EOF
,nc
都会递增。最后,我们将nc
调整为字符串的长度,从而退出for循环
但是,该程序只接受输入,不显示应与字符长度关联的值。
我不明白什么?我假设这本书比我更有可能是对的,所以我想我在某个地方出错了。你有三种可能的选择
double
更改为int
printf()
中的%d“
更改为%lf”
nc
转换为int
如下(int)nc代码>
'\n'
或者如果您不想计算“\n”
#include <stdio.h>
main()
{
double nc;
for(nc=0; getchar()!=EOF; ++nc);
printf("%1d\n",nc);
}
你有三种可能的选择
double
更改为int
printf()
中的%d“
更改为%lf”
nc
转换为int
如下(int)nc代码>
'\n'
或者如果您不想计算“\n”
#include <stdio.h>
main()
{
double nc;
for(nc=0; getchar()!=EOF; ++nc);
printf("%1d\n",nc);
}
但是,该程序只接受输入,不显示值
这应该与字符的长度相关联。我是什么
不理解?我认为这本书在未来的发展中有更大的机会
比我对,所以我想我在哪里出了问题
for循环仅在标准输入信号EOF时结束。这通常可以在Linux上通过Ctrl+d
完成。对于其他操作系统,您需要找到挂件
for循环结束后,读取的字符数将显示在标准输出上
备注:nc
应为整数。printf
函数的格式字符串足够%d
格式化源代码可以帮助您更容易理解。请注意,for循环不包含printf
(正如您可能已经假设的那样)
#包括
main()
{
int nc;
对于(nc=0;getchar()!=EOF;++nc)
;
printf(“%d\n”,nc);
}
但是,该程序只接受输入,不显示值
这应该与字符的长度相关联。我是什么
不理解?我认为这本书在未来的发展中有更大的机会
比我对,所以我想我在哪里出了问题
for循环仅在标准输入信号EOF时结束。这通常可以在Linux上通过Ctrl+d
完成。对于其他操作系统,您需要找到挂件
for循环结束后,读取的字符数将显示在标准输出上
备注:nc
应为整数。printf
函数的格式字符串足够%d
格式化源代码可以帮助您更容易理解。请注意,for循环不包含printf
(正如您可能已经假设的那样)
#包括
main()
{
int nc;
对于(nc=0;getchar()!=EOF;++nc)
;
printf(“%d\n”,nc);
}
程序会一直读取输入,直到输入结束。如果在终端上键入,则需要了解如何发出输入结束的信号。在Windows上,按Ctrl+Z,然后按Enter键。在类Unix系统(Linux、macOS等)上,按行开头的Ctrl+D。或者,让程序从文件中读取:在Windows命令行上,运行myprogram.exe程序将一直读取输入,直到输入结束。如果在终端上键入,则需要了解如何发出输入结束的信号。在Windows上,按Ctrl+Z,然后按Enter键。在类Unix系统(Linux、macOS等)上,按行开头的Ctrl+D。或者,让程序从文件中读取:在Windows命令行上,运行myprogram.exe,对于double
,使用%.0f
而不是%1d
。或者更改nc
的类型。K&R手册很棒,但很旧,它与现代C不符。main()
不再是有效的C,请始终使用int main()
。现在谈谈你的问题。你认为什么时候getchar()
会等于EOF
?你认为你需要为此做些特别的事情吗?“如果你不知道,很可能你永远都打不到EOF。”风向标,好吧,现在我明白了。我以为他们想在每次迭代时输出nc
。@n.m.intmain(void)
;)此外,您为什么使用双重计数?你数过1.0只羊,2.0只羊,3.0只羊吗?使用%1d
打印
double`是不正确的,您的程序很可能会显示不正确的结果。使用int
代替。对于双精度,使用%.0f
代替%1d
。或者更改nc
的类型。K&R手册很棒,但很旧,它与现代C不符。main()
不再是有效的C,请始终使用int main()
。现在谈谈你的问题。你认为什么时候getchar()
会等于EOF
?你认为你需要为此做些特别的事情吗?“如果你不知道,很可能你永远都打不到EOF。”风向标,好吧,现在我明白了。我以为他们想在每次迭代时输出nc
。@n.m.intmain(void)
;)此外,您为什么使用双重计数?你会数1.0只羊,2.0只羊吗
#include <stdio.h>
main()
{
int nc;
for(nc=0; getchar()!=EOF; ++nc)
;
printf("%d\n",nc);
}
int nc;
…
printf("%d\n", nc);
long nc;
…
printf("%ld\n", nc);
double nc;
…
printf("%f\n", nc);
aliman.c:3:1: warning: return type defaults to ‘int’ [-Wreturn-type]
main()
^
aliman.c: In function ‘main’:
aliman.c:9:5: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘double’ [-Wformat=]
printf("%1d\n",nc);
^
aliman.c:13:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^