高端 传奇守护者之杖:请教一个关于C语言的问题

来源:百度文库 编辑:高考问答 时间:2024/04/30 03:36:54
有这么一段C语言,我是看不懂它的输出怎么会这样,输入怎么会这样.
#include<stdio.h>
main()
{
int i;
char c[6];
for(i=0;i<6;getchar()=c[i],i++);
for(i=0;i<6;i++,putchar(c[i]));
printf("\n");
}
从键盘输入
ab<CR>
c<CR>
def<CR>
则输出

ab
c
d
据说是把ENter当成字母了,不大懂.请解释一下
可是是char字符啊,ab不是字符啊,怎么会输出来呢

你原来的程序有错误改为
#include<stdio.h>
main()
{
int i;
char c[6];
for(i=0;i<6;c[i]=getchar(),i++);
for(i=0;i<6;putchar(c[i]),i++);
printf("\n");
}使用getchar()时,回车就是'\n',当然是字符阿,如果按照我的程序,还是按照你的输入方式,仍然会得到你的结果。为什么呢?我们举个例子:如果输入ab1c2def回车,最后会输出ab1c2d,正常;如果把1和2换成‘回车’,不就成了你最后的结果吗?注意:1.回车既作为输入操作结束又作为字符。2.最后输入的字符数多于6个时,getchar()不能接收,其实是c[i]不能接收,所以输不出来;3.为什么到六个字符循环不自动结束?这与你的for语句有关,因为你只有结束getchar()操作后,才i++,结束循环,所以说你最后输入再多的字符,只要没有回车结束操作,循环就不能自动结束。

enter是一个转义字符(\n),它也别编入ASCII编码中了,所以用getchar函数时,会取它并用其值赋给数组中相应元素,这也是为什么输出结果不是显示在同一行的原因

兄弟,原代码有错误,在语句for(i=0;i<6;getchar()=c[i],i++);
应该是for(i=0;i<6;c[i]=getchar(),i++);

输入的内容送入缓存:
ab<CR>c<CR>def<CR>
for(i=0;i<6;getchar()=c[i],i++);
for(i=0;i<6;i++,putchar(c[i]));
i=0, c[0]='a', i++
i=1, c[1]='b', i++
i=2, c[2]='\n', i++
i=3, c[3]='c', i++
i=4, c[4]='\n', i++
i=5, c[5]='d', i++
i=6执行下一个循环

i=0, 输出c[0]即a, i++
i=1, 输出c[1]即b, i++
i=2, 输出c[2]即enter 换行, i++
i=3, 输出c[3]即c, i++
i=4, 输出c[4]即enter 换行, i++
i=5, 输出c[5]即d, i++
i=6执行下一个语句

输出enter
结果:
ab
c
d

ab 是c[0]和c[1]分别以字符型输出的

<CR>是回车的意思,实际输入中按回车就可以。