C语言for语句的循环体问题

来源:百度知道 编辑:UC知道 时间:2024/06/03 01:13:34
正在看《C程序设计语言》,关于FOR语句的循环体,里面有这样一个字符计数的程序:
#include "stdio.h"
main()
/*无法正确执行的例题B*/

{
double nc;
for (nc=0;getchar()!=EOF;++nc)
; /*空循环体*/
printf("%.0f\n",nc);
}
该程序执行后没有输出,我百思不得其解,最后把作为空循环体的分号去掉,反而能正确执行相应的计数功能了,真是太奇怪了。
书中特地提到for语句必须有一个循环体,而例题没有循环体,所以要特地加个分号作为空的循环体,程序才能正确执行,为什么实际上缺少这个循环体(分号)的时候反而能正确执行了呢?请教一下!

我的运行环境是钟家民集成环境的TC2。

谢谢!

#include "stdio.h"
int main()

{
double nc;
for (nc=0;getchar()!='\n';++nc);
/*空循环体*/
printf("%.0f\n",nc);
}

/*你编的程序逻辑、语法都没问题,只是判断输入结束的时候不对,改成这样就行了*/

空循环,你这语句貌似有问题,未定义变量,修改如下看看:

#include "stdio.h"
main()
/*无法正确执行的例题B*/

{
int nc;
char c;
for (nc=0;(c=getchar())!=EOF;++nc)
; /*空循环体*/
printf("%d\n",nc);
}

程序本身没大问题,只不过这里你定义的nc是double类型的(一般不这么用但是用也不算错)。而在程序运行的时候,你必须先输入符号串,最后输入一个ctrl+z来匹配这个EOF,否则你的程序一直在for循环里面出不来。不信你可以试一下。

for语句是不用分号的.不知是for语句,if/ifelse/while/do while等关键字都不用分号