请问我这个程序为什么不能正常输出结构体变量的成员变量p[i].m呢?

#include<stdio.h>
#include<string.h>
int main()
{
int n, i;
scanf("%d", &n);
struct s
{
char n[100];
char m[100];
};
struct s p[100];
for (i = 0; i < n; i++)
scanf("%s%d", p[i].n, p[i].m);
for (i = 0; i < n; i++)
for (int j = n - 1; j > i; j--)
if (strcmp(p[j].n, p[j - 1].n) == -1)
{
p[n + 1] = p[j];
p[j] = p[j - 1];
p[j - 1] = p[n + 1];
}
for (i = 0; i < n; i++)
printf("%s%s", p[i].n, p[i].m);
return 0;
}

我输入p[i].m的时候输入的是一串数字,输出的时候就是乱码了,但p[i].n的输出是正常的(输入的是一串字母),为什么呢?