定义完数组元素个数后(n),利用循环对数组a[n]的元素逐一赋值,再调用自定义copy函数利用循环将a[n]中各元素的值对应赋给b[n]中各元素,但最后结果出现了问题,没法输出b[2]的值。
printf("%s",b);
你用 %s 是以字符串形式输出b,b字符串结尾要有'\0'才行
但你没有给b结尾设置'\0',这样输出b后面就不确定了
要用这样输出
for (i=0;i<n;i++)
printf("%c",b[i]);
再就是,因为前面 scanf("%d",&n);用户输入了数据和换行符‘\n’,在读取了数据之后,输入缓存里就残留了一个‘\n’。
之后第一次使用scanf("%c", &a[i])会读取输入缓存里上次残留的‘\n’,也就是a[0]读取了换行符‘\n’,而不是读取新输入的'i'字符。
第二次使用scanf("%c", &a[i])才是读取新输入的'i'字符赋值给a[1]。
可以在 scanf("%d",&n); 之后用 setbuf(stdin, NULL); 清除输入缓存。 或者用getchar() 把缓存里上次残留的‘\n’先读取掉
你题目的解答代码如下:
#include <stdio.h>
void copy(char a[], int n, char b[])
{
int i;
for (i=0;i<n;i++)
b[i] = a[i];
printf("复制后为:");
for (i=0;i<n;i++)
printf("%c",b[i]);
}
int main()
{
int n,i;
scanf("%d", &n);
getwchar(); //把缓存里上次残留的‘\n’先读取掉
char a[n], b[n];
for (i=0;i<n;i++)
scanf("%c", &a[i]);
copy(a,n,b);
return 0;
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!