C语言:数组相关,逗号表达式,for循环

原程序如图一,这里也将其打出。

输入:a<回车>b<回车>cdef<回车>
输出如图二



#include<stdio.h>
#define N 6
int main()
{
    char c[N];
    int i=0;
    for(;i<n;c[i]=getchar(),i++);
    for(i=0;i<n;putchar(c[i]),i++);
    return 0;
}

我就很好奇数组c里面存了什么东西,于是我加了这样几句:

for(t=0;t<6;t++)
    {
    printf("%c ",c[i]);
    }


非常简单的几句,然后重复上面的输入,输出如下图三。请求各位告知图二和图三各是什么原因,感谢各位。

另:我win10系统默认的是无输入法英文键盘,编译器使用vc2010版。

img

img

img

第三个表达式是先执行的,然后才判断条件,所以等于是多执行了一次,造成了越界

int i=0; for(;i<n;c[i]=getchar(),i++); 这样写是连续读取6个字符给 c[] , getchar() 函数可以读入字符 空格 回车换行符等,直到满足 i >= 6退出循环,所以输入 a 回车 后,a 是一个字符,回车也是一个字符被读入,此时 i++ 两次,i 就已经是 2 了,b 回车 后,i 就是 4 了, cdef 只能读取 c d 后就结束循环了。输出回车换行符的效果,就是输出的排列换行格式和输入时的一模一样。