1.在使用scanf和循环结构(%c)输入字符串的时候,数组长度要大于字符串长度,而循环次数应为字符串长度,且要在最后的下标+1后填上结束符
char a[100]; int i;
for (i = 0; i <= 12; i++)
scanf_s("%c", &a[i]);
a[13] = '\0';
以下为实验现象:
(1)循环的次数决定了输入字符的长度,因此这种方法可以读入空格;
(2)空格占用字符串长度,但不作为输入结束的标志;回车既占用长度又标志输入结束
(3)最后一行结束符去掉了也不改变字符串长度,但是后面会有很多乱码
(4)如果结束符不是紧跟着字符串,那么字符串长度不变,但是会有乱码
(5)由于是手动打结束符,因此字符串长度就是字符(包含空格)的长度
所以缺陷很明显啊,虽然可以读入空格,但每一次输入的内容指定,不堪大用。
2.使用循环%c输入输出二维字符数组
char a[100][100]; int i,j;
for (i = 0; i < 3; i++)
{
for (j = 0; j <=5; j++)
scanf_s("%c", &a[i][j]);
fflush(stdin);
}
a[2][5] = '\0';
for (i = 0; i < 3; i++)
{
for (j = 0; j < 5; j++)
printf("%c", a[i][j]);
printf("\n");
}
return 0;
}
(1)定义数组大小时可以定义得很大,免得后续出格;
(2)其实要一个长方形数组仅靠循环输出就可以办到,但不方便,也不会用这种方法
(3)占用的位置由输入循环决定,只要不出格就与字符串大小无关
(4)在最后一行的元素后补上终止符即可
(5)想要按回车或者空格就得提前在输入循环预留好相应的位置,最后的回车不用(因为有结束符)