scanf 返回成功读取的数据个数, 你没有使用它的返回值, 所以会有 Warning;
对于 scanf("%d", &n), 如果输入正确的内容, 则返回 1, 表示成功读入 1 个数据;
如果输入错误的内容, 则返回小于 1 的值, 此时应该立刻使用 scanf("%*s") 将缓冲区清空, 否则将导致后续的循环都出现问题;
我们可以这样写:
if (1 == scanf("%d", &n)) {
// ...
} else {
n = scanf("%*s"); // 此处一定为0.
}