能力值:
( LV2,RANK:10 )
|
-
-
2 楼
唔 第一个程序貌似只获取了一次输入吧
把
c = getchar();
放到while循环体里应该就可以了
唔,应该是在while循环体里添加这条语句合适一些~
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
EOF是文件结束的吧,判断字符串结束应该是 c!='\0'
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
[QUOTE=LShang;1082390]唔 第一个程序貌似只获取了一次输入吧
把
c = getchar();
放到while循环体里应该就可以了
唔,应该是在while循环体里添加这条语句合适一些~[/QUOTE]
哦 我放里面以后 是可以结束 但是我这样写
#include <stdio.h>
int main(void)
{
int c;
long nc=0;
while(c != EOF)
{
c=getchar();
nc++;
}
printf("%ld\n",nc);
return 0;
}
把printf 拿到外面就无法输出nc 的值呢?
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
嗯 但是 从第二个程序可以看出了EOF 也是可以结束 为什么第一个就无法结束呢? 难道书上是错的?
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
这段代码逻辑上没有问题
而且应该可以正常运行的
唯一的问题就是在变量c使用之前没有对其进行初始化
可以在声明时赋值为0
另外我测试了一下,没遇到你说的问题
printf语句是可以正常执行的
请问你确定正确的键入了EOF?
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
嗯 是的 我运行 回车后是可以继续输入的 没有输出个数 我用的win7+VC++6.0
然后我发现这样是可以运行的 int main(void)
{
long nc=0;
while(getchar() != '\n')
++nc;
printf("%ld\n",nc);
return 0;
}
难道getchar() 在回车后 并没有认为程序 结束?
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
Windows下EOF的正确键入方式是ctrl + Z
程序本身没啥问题的
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
谢谢 楼上两位的帮忙 万分感谢 经过我测试是这样的
代码 #include <stdio.h> int main(void) { long nc=0; int c; while((c=getchar())!=EOF) { putchar(c); nc++; printf("%ld\n",nc); } return 0; }
输出的结果为:
可以看出 回车符 也会被计算在内 也就是认为 没有结束 而在执行一次getchar(); 故 外面的printf 就不会被执行 而换成'\n' 就能遇到回车后跳出while 循环 而EOF 会认为回车后面才是结束标志
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
#include <stdio.h>
int main(void)
{
int c,nc;
nc = 0;
while ((c = getchar()) != EOF)
{
++nc;
}
printf("%d",nc);
return 0;
}
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
唔 纠正错误
这段代码有逻辑错误的
在接受到EOF之后,nc还会再自增一次
这样会把EOF也算为字数中
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
嗯 多谢了 ctrl + z 我才知道
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
这段代码有点问题,11楼已经说了,当时我也很疑惑
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
貌似上学时接触过 看了楼下各位解释 感觉还要加强学习
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
学习了,回头试试下。
|
能力值:
( LV3,RANK:30 )
|
-
-
16 楼
“Windows下EOF的正确键入方式是ctrl + Z” 学习了~
|
能力值:
( LV10,RANK:173 )
|
-
-
17 楼
EOF的全称是ending of file,个人认为这边主要是为了从文件中去读,而不是从控制台去输的。
还有,我觉得如果是第一次接触C,不建议用K&R的书(书是非常经典的,但未必能看好)。
|
能力值:
( LV2,RANK:10 )
|
-
-
18 楼
c= getchar()和EOF的判断放在while里。
|
|
|