C:scanf()采用的参数多于应有的参数

时间:2018-02-25 13:30:59

标签: c arrays scanf

我在这里有一个非常简单的代码:

DefinitionPage

应该创建一个1x9数组,然后从用户读取9个字母(字母,输入,字母,输入等)并将它们放入数组中。然后它应该打印出数组,好像它是3x3数组。它应该有一个奇怪的例外:第一个循环需要用户输入10个字母,而不是9个,为什么?

我发现一些信息可能是由循环中“%c”旁边的“\ n”引起的,但是当我删除它并只留下“%c”时,程序只读取5个字母,因为它需要输入另一个字符。

我也尝试使用“%s \ n”代替,但是由于某种原因,A周围的堆栈已损坏,它仍然会读取10个字母而不是9个。

2 个答案:

答案 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