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;
} 展开
#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;
} 展开
3个回答
展开全部
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#后回车,就能得到结果。
{
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#后回车,就能得到结果。
展开全部
因为你用了getchar();当然要在输入一个字符才能结束啊,,
追问
cArry[i]=getchar;
帮我看看这条语句。
getchar也可以这样赋值用吗?
追答
可以是可以,可是你后边少了一个括号
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询