新手初学C,请问为什么输出结果跟预想的不一样,不是输入的字符?

图片说明图片说明

输入一个字符还不行,必须十二个以上,可是不理解为什么输出的结果跟预想的不一样呢?
希望大佬帮忙看一下,谢谢!

for循环要加大括号,这种用缩进来标明循环体是python的写法,不加大括号等价于这种代码

for( i = 0; i < 12; i++ ){
    scanf("%c", &str[i]);
}
//此时i=12,对于数组str[12]已经越界,打印出什么都不奇怪,而且只打印一次
printf("%c", str[i]);

应该这样写

for( int i = 0; i < 12; i++ ){
    scanf("%c", &str[i]);
    printf("%c", str[i]);
}

你上述写法的目的是利用一个for循环控制字符的输入输出,执行完scanf后,i已经递增为11了,再执行输出时,指向了一段不知道的区域,所以输出乱码
正确的书写应该如下:
void main()
{
char ch[12];
int i;
printf("输入:\n");
for (i = 0; i < 12; i++)
{
scanf("%c", &ch[i]);
}
for (i = 0; i < 12; i++)
{
printf("%c", ch[i]);
}
}

直接上图,上代码;

图片说明

#include <stdio.h>
#include <string.h>

int main(void)
{
    char arr[52];
    memset(arr,0x0,sizeof(arr));

    printf("Pls input string: \n");
    scanf("%[^\n]",arr);
    printf("%s",arr);
    return 0;
}