昨天的总结写到:
新学会了一种的代码的新写法:
k=0;
等价:dif[k++] = a[i] //一步到位实现了 k++ 先dif[k] 再k++
等价:dif[k] = a[i] ;k++
但实际上这样写回出现一个小黑洞:
今天在做 练习7-11 字符串逆序 (15 分) 题时用上述写法 答题 会出现莫名其妙的空行 (我叫它黑洞!)
上代码!
#include <stdio.h>
int main (){
int k=0;
char a[80];
while((a[k++]=getchar()) != '\n') ;
// a[k]='\0';
for(int i=k-1 ;i>=0 ;i-- )
printf("%c",a[i]);
printf("\n");
for(int i=0 ;i<k;i++)
printf("现在时第%d个位置:a[%d]==%c\n",i+1,i,a[i]);
printf("逆转结束");
return 0;
}
输出结果:
$ cpp main.c -o main.ii
$ cc main.ii -o main
$ ./main
0123456789 //输入的10个数
// 多出来的空行
9876543210 //逆转
现在时第1个位置:a[0]==0
现在时第2个位置:a[1]==1
现在时第3个位置:a[2]==2
现在时第4个位置:a[3]==3
现在时第5个位置:a[4]==4
现在时第6个位置:a[5]==5
现在时第7个位置:a[6]==6
现在时第8个位置:a[7]==7
现在时第9个位置:a[8]==8
现在时第10个位置:a[9]==9
现在时第11个位置:a[10]== //因为循环结束的时候k=10 此时没有数据
// 多出来的空行
逆转结束Program exited with status 0
多出来了两个黑洞!
修改代码后:变成常规写法后:
$ ./main
0123456789
9876543210
现在时第1个位置:a[0]==0
现在时第2个位置:a[1]==1
现在时第3个位置:a[2]==2
现在时第4个位置:a[3]==3
现在时第5个位置:a[4]==4
现在时第6个位置:a[5]==5
现在时第7个位置:a[6]==6
现在时第8个位置:a[7]==7
现在时第9个位置:a[8]==8
现在时第10个位置:a[9]==9
逆转结束Program exited with status 0 //输出结果就很 清爽和紧凑
具体为什么,现在还搞不清楚!2021/4/20