我这里有一个非常简单的代码:
char A[9];
for (int i = 0; i < 9; i++){
scanf("%c\n", &A[i]);
}
for (int i = 0; i < 9; i++){
printf("%c ", A[i]);
if (i == 2 || i == 5 || i == 8){
printf("\n");
}
}
它应该创建一个 1x9 数组,然后读取用户的 9 个字母(letter、enter、letter、enter 等等)并将它们放入数组中。然后它应该打印出该数组,就好像它是 3x3 数组一样。它正常工作,但有一个奇怪的异常(exception):第一个循环从用户那里获取 10 个字母,而不是 9 个,为什么?
我发现一些信息可能是循环中“%c”旁边的“\n”引起的,但是当我删除它并只留下“%c”时,程序只读取5个字母,因为它需要作为另一个字符输入。
我也尝试使用“%s\n”代替,但随后 A 周围的堆栈由于某种原因被损坏,它仍然读取 10 个字母而不是 9 个。
最佳答案
scanf()
接受的参数比应有的多?是的,这是因为 scanf()
内部的 \n
。您应该一次扫描一个字符,但 scanf()
每次都会等待额外的输入,因为 \n
应该是这样的
scanf(" %c",&A[i]);/* provide space before %c to clear stdin buffer */
完整代码
for (int i = 0; i < 9; i++){
scanf(" %c", &A[i]);
}
关于C: scanf() 接受的参数多于应有的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48974007/