为什么直接输出没乱码,用%输出就出现了乱码

img


把黑方框换成字母就正常了,但用黑方框就乱码


#include<stdio.h>
#pragma warning(disable:4996)
#include<time.h>
int main() {
    char samp[3] = { '■' ,'■', '■'  };
    int i = 0;
    printf("■\n");
    while (i < 3) {
        printf("%c", samp[i]);
        i++;
    }
    return 0;
}

改成字符串就可以了,供参考:

#include<stdio.h>
#pragma warning(disable:4996)
#include<time.h>
int main() {
    char samp[3][3] = { "■" ,"■", "■"};
    int i = 0;
    printf("■\n");
    while (i < 3) {
        printf("%s", samp[i]);
        i++;
    }
    return 0;
}

我很怀疑你的这个方框到底是不是ascii字符?

%c的格式化输出形式,代表输出单个字符。并且只有符合ascii码规范的值才能正常打印输出。否则就是乱码。

我觉得出现这个问题的本质在于:因为所有内容,在冯诺依曼体系的计算机内存里,都是以二进制数据存在。只不过看你怎么用了。到底是按多少字节读?还是,逐二进制为读?ascii码用1个字节标识,并且,最高位为0。在ascii码的有效取值内,以单字符输出,就能够正常打印,否则就会出问题。

我个人觉得是这个问题。有问题我们可以继续交流。谢谢~

测试了一下,你这个黑框字符的长度是2,说明它是由两个字节组成的,因此直接放字符串里显示没问题,但用%c显示是不行的。因为组成它的两个字节都是不可见字符,会显示成乱码

不属于ASSII码字符吧,要想使用的话应该要设置编码吧,理论上,我没有试过。。。

img