我在这里有一个非常简单的代码:
DefinitionPage
应该创建一个1x9数组,然后从用户读取9个字母(字母,输入,字母,输入等)并将它们放入数组中。然后它应该打印出数组,好像它是3x3数组。它应该有一个奇怪的例外:第一个循环需要用户输入10个字母,而不是9个,为什么?
我发现一些信息可能是由循环中“%c”旁边的“\ n”引起的,但是当我删除它并只留下“%c”时,程序只读取5个字母,因为它需要输入另一个字符。
我也尝试使用“%s \ n”代替,但是由于某种原因,A周围的堆栈已损坏,它仍然会读取10个字母而不是9个。
答案 0 :(得分:2)
scanf()
采取的争论多于?是的,因为\n
内的scanf()
。您应该一次扫描一个字符,但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]);
}
答案 1 :(得分:1)
请改为尝试:
char A[9];
for (int i = 0; i < 9; i++){
scanf(" %c", &A[i]);
}
for (int i = 0; i < 9; i++){
printf("%c ", A[i]);
if (i == 2 || i == 5 || i == 8){
printf("\n");
}
}
按照此问题中的说明使用scanf("%c\n", &A[i]);
时会出现问题:scanf asking twice for input while I expect it to ask only once