关于字符数组的打印问题

这个代码读取之后都是正确的(已经验证),但是一到后面打印就是乱码,中间也没有回改变数组的值的表达式,这是怎么回事呢?

        for (m = 0; m < 18; m++) {
            A[m] = getchar();
            if (m <= 16) {
                sum += A[m] * B[m];
                if (A[m] >='0'&&A[m]<='9') {
                    c++;
                }
            }
        }
        z = sum % 11;
        if (z % 10 == 2 && c == 17){}
        else {
            for (m = 0; m < 18; m++) {
                printf("%d", A[m]);
            }
            shu = 1;
        }
        printf("\n");
        getchar();

根据代码,我觉得可能是使用了不同编码格式来读入和输出字符串,导致输出乱码的情况。

在C语言中,字符串是以字符数组的形式存储的,字符数组中的每一个元素都是一个字符。在读入字符时,使用函数getchar()可以读入一个字符,并将其存储在字符数组中。

在输出字符串时,使用函数printf()可以输出一个字符串。在输出字符串时,需要注意的是,字符串的结尾是以'\0'结尾的,所以在输出字符串时,要在字符数组的最后一个元素后面加上'\0'。

如果在读入字符串时使用的是一种编码格式,而在输出字符串时使用的是另一种编码格式,那么可能会导致输出乱码的情况。

为了解决这个问题,可以试试使用相同的编码格式来读入和输出字符串。还可以使用相关的转换函数来将字符串转换为所需的编码格式,以便在输出时能够正确地显示字符串。

例如可以使用函数iconv()将字符串从一种编码格式转换为另一种编码格式,或者使用函数mbstowcs()和wcstombs()将字符串从多字节编码转换为宽字符编码,或者从宽字符编码转换为多字节编码。
望采纳。