原程序如图一,这里也将其打出。
输入: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版。
第三个表达式是先执行的,然后才判断条件,所以等于是多执行了一次,造成了越界
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 后就结束循环了。输出回车换行符的效果,就是输出的排列换行格式和输入时的一模一样。