//两侧字符向中间逼近显示
#include <stdio.h>
int main()
{
char arr[] = { "welcome to bit!!!!!" };
char ar1[] = { "###################" };
int left = 0;
int right = sizeof(arr); //错误计算
printf("%s\n", arr);
printf("%s\n", ar1);
for (; left <= right;)
{
ar1[left] = arr[left];
ar1[right] = arr[right];
printf("%s\n",ar1);
left++;
right--;
}
return 0;
}
以上right计算有问题,正确如下,-2;
//两侧字符向中间逼近显示
#include <stdio.h>
int main()
{
char arr[] = { "welcome to bit!!!!!" };
char ar1[] = { "###################" };
int left = 0;
int right = sizeof(arr)/sizeof(ar1[0])-2;
printf("%s\n", arr);
printf("%s\n", ar1);
for (; left <= right;)
{
ar1[left] = arr[left];
ar1[right] = arr[right];
printf("%s\n",ar1);
left++;
right--;
}
return 0;
}
由于sizeof()结果中包含了\0,并且数组下标从0开始,所以减2.
如 0 1 2 3 \0
可以使用另一种方式:
int right = strlen(arr1)-1;//strlen不包含\0
改进后
//两侧字符向中间逼近显示
#include <stdio.h>
#include <string.h>
#include <windows.h>
#include <stdlib.h>
int main()
{
char arr[] = { "welcome to bit!!!!!" };
char ar1[] = { "###################" };
int left = 0;
int right = strlen(arr) - 1;
//int right = sizeof(arr)/sizeof(ar1[0])-2;
printf("%s\n", arr);
printf("%s\n", ar1);
for (; left <= right;)
{
ar1[left] = arr[left];
ar1[right] = arr[right];
printf("%s\n",ar1);
left++;
right--;
Sleep(1000); //等待1000毫秒
system("cls"); //执行系统命令的一个函数 清空屏幕
}
return 0;
}