C语言问题

运行下面的程序,如果键盘上输入:ab<回车>c<回车>def<回车>则输出结果为____.#defineN6#include<stdio.h>main(){charc[N... 运行下面的程序,如果键盘上输入: ab<回车> c<回车> def<回车> 则输出结果为____.
#define N 6

#include <stdio.h>
main ()
{
char c[N];
int i=0;
for ( ; i<N;c[i]=getchar(),i++);
for(i=0;i<N;i++) putchar(c[i]);
printf("\n);
}
求每一步详细解答!!!
不是getchar()只能接受一个字符么? 那么c[0]等于a 然后跳到for(i=0;i<N;i++) putchar(c[i]);
那么输出的就是c[0]所以就是a, 接下来不是 继续for(i=0;i<N;i++) putchar(c[i]);的循环 i=1 但是c[1]没有值所以第一行只有一个a 不是一直等到for(i=0;i<N;i++) putchar(c[i]);结束之后才会跳回for ( ; i<N;c[i]=getchar(),i++);吗
我的理解就是答案是
a

c

d
其中a与c与d的间距为6行

以上是我的思路 到底哪错了!!!!!求解!!!
展开
 我来答
沧海雄风2009
2013-01-30 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8525
采纳率:79%
帮助的人:2906万
展开全部

很明显 把 第一个 第二个的回车也接收了 然后 就数组满了  最后的def就

 

只能接收一个d了 因此 输出就是 ab回车 c 回车 d   printf("\n");回车

 

输出就是

 

ab

c

d

press any key 

追问
问题补充已经更改,求再看看 谢谢!!
追答
更简单了

for ( ; i<N;c[i]=getchar(),i++); 这个 注意看 后面有个分号

其实是等同于

for ( ; i<N;c[i]=getchar(),i++)
{
;
}

那么跟下面的关系就是

for ( ;i<N;c[i]=getchar(),i++)
{
;
}
for(i=0;i<N;i++)
{
putchar(c[i]);
}

因此是要接收完6次 才会到下个for循环这里
MusicAudience
2013-01-30
知道答主
回答量:36
采纳率:0%
帮助的人:24.8万
展开全部
输出为:
ab
c
d

因为一个回车占两个字符,即“\n\r”,但读的时候,抛弃了\r,但\n是被保留读取的,所以出现了这个结果。可理解?

对于补充问题:首先你没有了解C++/C中的输入输入机制。当进行输入时,系统自动创建一块内存区域接受键盘输入,键盘对当前程序的都存在该缓存区。在程序调用getchar时候其实是从该缓存区读入的,所以回车键是绝对不会放过的。有的函数可以逃脱回车键是因为他对回车键输入ANSC码进行了处理。但是有的函数却没有处理。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiahanvy
2013-01-30 · TA获得超过342个赞
知道小有建树答主
回答量:462
采纳率:0%
帮助的人:353万
展开全部
for ( ; i<N;c[i]=getchar(),i++); 会读进6个字符,包括回车
for(i=0;i<N;i++) putchar(c[i]); 打印6个字符
输出应该是
ab<回车> c<回车> d
更多追问追答
追问
问题补充已经更改,求再看看 谢谢!!
追答
for ( ; i<N;c[i]=getchar(),i++); 有分号;

如果没有分号应该跟你说的差不多,但是也不是6个换行,因为c里面的值是未知的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
phd121212
2013-01-30 · TA获得超过494个赞
知道小有建树答主
回答量:114
采纳率:0%
帮助的人:37.1万
展开全部
你的理解错了,输出的是c[0]=a,c[1]=b,c[2]是有值的为“换行符”,c[3]=c,c[4]="换行符”,c[5]=d,。那为什么输入的时候可以输入ef呢?那是因为一个getch(),可以接收在定义的char c[]的类型数据的范围内的所有字符,换句话说getch()接收的字符是由你定的,只要大小不超过数据类型的大小范围(一般情况下都是不可能的)都会输入到屏幕上(因为你有一条赋值语句c[i]=getchar(),如果没有,你输入的那些东西都会被视为没有或没作用,不会在屏幕上出现的),但是,(c[i]=getchar(),)实际上只有前六个字符被存储到字符数组c上。而ef则有系统自动随机开辟个空间存储它,编译结束就清空。(都是数组c的存储空间上)第一个for循环的作用就是给数组c赋值,第二个for循环,就是一次输出,数组c的值。第一个for和第二个是没有关系的,因为他们之间有分号间隔,表示两个不同语句。在编译过程是逐条编译的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gggggdff
2013-01-30 · TA获得超过1451个赞
知道小有建树答主
回答量:1950
采纳率:0%
帮助的人:716万
展开全部
v能接收一个d了 因此 输出就是 ab回车 c 回车 d print
追问
问题补充已经更改,求再看看 谢谢!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式