学习C语言中,遇到一个问题,请看程序:程序就是 用循环输出26个小写字母;
程序1:
#include<stdio.h>
int main(void)
{
char ch[26];
int i;
ch[0]='a';
for(i=0;i<26;i++)
{
ch[i]=ch[0]++;
printf("%4c\t",ch[i]);
}
return 0;
}
注意这里用的是ch[0]++
输出的结果是:
这个结果是有问题的, 前面应该是 a b , 结果是 a a . 但是 我没看出错在哪里?
程序2:
#include<stdio.h>
int main(void)
{
char c,ch[26];
int i;
c='a';
for(i=0;i<26;i++)
{
ch[i]=c++;
printf("%4c\t",ch[i]);
}
return 0;
}
这个输出结果 是没问题的,如下:
为什么会这样呢?
ch[i]=ch[0]++;
printf("%4c\t",ch[i]); 这样写 到底错在哪里呢?
谢谢 赐教!
这个就像当于 x=x++ 的问题 如果有这个语句 for(n=0,x=0; n<20;n++) x=x++; 那么x 一直都是0,这是因为 先运行 x++这个式子,其结果为0,将该结果存在一个位置,比如tem , 然后x的值递增1,最后将tem里存贮的值0 赋予X, 这样x又变回了0.
本问题中 在于 ch[0] = ch[0]时 原地踏步了一次, 所以后面就有了两个a.