如果你遇到了这个问题,那么你大概率是使用了 scanf("%c", &a); 进行读入
事实上,这道题的数据每行末尾不只有 '\n' ,还有一个 '\r' 。
拿第一组数据为例,你看到的是
6
114514
但其实真正输进去的其实是6\r\n114514
所以很多c语言的代码用直接%c读入就错了
方案一:先用 scanf("%d\n", &n); 读入位数,此时 '\r' 和 '\n' 都已经被处理掉了;接下来就可以正常使用 scanf("%c", &a); ( a 是 char 类型的)读入了。
方案二:读入位数部分正常使用 scanf("%d", &n); ,读入每一位的部分使用 scanf("%1d", &a); ( a 是 int 类型的)。
方案三:读入位数部分仍然正常使用 scanf("%d", &n); ,读入每一位的部分使用 scanf("%s", str); ( str 是字符数组),然后再对 str 的每一位分别处理。
方案四:读入位数部分仍然正常使用 scanf("%d", &n); ,在读入每一位数字前先 getchar(); 两次,分别处理掉 '\r' 和 '\n' ,随后正常使用 scanf("%c", &a); ( a 是 char 类型的)。
方案五:读入位数部分仍然正常使用 scanf("%d", &n); ,在读入每一位数字前先用 scanf("\n", &useless); 把 '\n' 处理掉,同时 '\r' 被跳过。
方案六:读入位数部分仍然正常使用 scanf("%d", &n); ,读入每一位数字时使用 scanf("%1s", str) 以达成每次处理一位的效果