c语言 EOF问题 5

9后面的EOF不应该直接跳出循环吗?为什么直到回车之后的EOF才跳出循环。#include<stdio.h>#include<stdlib.h>StrLen(chara[... 9后面的EOF不应该直接跳出循环吗?为什么直到回车之后的EOF才跳出循环。
#include<stdio.h>
#include<stdlib.h>
StrLen(char a[]);
int main(void)
{
int iLength=0;
char cArry[30];
int i=0;
printf("please input a string\n");
while((getchar())!=EOF)
{
cArry[i]=getchar;
i++;
}
cArry[i]='\0';
iLength=StrLen(cArry);
printf("您输入字符串的长度为:%d",iLength);
system("PAUSE");
return 0;
}
StrLen(char a[])
{
int i=0;
while(a[i]!='\0')
{
i++;
}
return i;
}
展开
 我来答
White_MouseYBZ
2014-02-10 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6676万
展开全部
while((getchar())!=EOF)
{
cArry[i]=getchar;
i++;
}
这段代码有错。cArry[i]=getchar;应该为cArry[i]=getchar();,不然编译都通不过。这样写逻辑上也有问题,每循环一次都要接收接收两次字符,显然不是你想要的。还有个潜在的问题:(getchar())!=EOF这种写法虽然合法正确,但却达不到你要跳出循环的目的;试想getchar()是接收键盘输入的字符,一次一个,你敲什么也是正确的,怎么会触发EOF?所以while((getchar())!=EOF)客观上是个“死循环”,输入^Z也并不能得到EOF(输入^Z'\n'^Z会结束循环的机制请搜索Ctrl+Z的有关信息)而结束循环。要想输入某个字符就结束循环,那就得找一个正文中不可能出现的字符来充当结束符。这里以#为例来修改一下代码,就能达到目的。把以上几行代码改如下——
while((cArry[i]=getchar())!='#')
i++;
cArry[i]='\0';
这样在输入123456789#后回车,就能得到结果。
seizeF
2014-02-10 · TA获得超过412个赞
知道小有建树答主
回答量:207
采纳率:0%
帮助的人:227万
展开全部

我在c++编译器下无法编译通过。还有我怀疑这一行代码

cArry[i]=getchar;

循环中的判断也用到了getchar,你确定是正确的?getchar有副作用,返回下一个字符,这里会跳过一个字符。

追问

我觉着改成ch=getchar()才是最正确的,可是为什么写了个错误的代码却出现了正确的答案呢。

这是更改之后的就正确了。

追答
对,就是这样,还有StrLen需要声明返回值,虽然C允许不声明,默认为int,但是这不是好习惯。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
rikyM
2014-02-10 · TA获得超过155个赞
知道答主
回答量:112
采纳率:0%
帮助的人:44.5万
展开全部
因为你用了getchar();当然要在输入一个字符才能结束啊,,
追问
cArry[i]=getchar;

帮我看看这条语句。
getchar也可以这样赋值用吗?
追答
可以是可以,可是你后边少了一个括号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式