C: scanf() 接受的参数多于应有的参数

标签 c arrays scanf

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

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/

相关文章:

在 C 中将字符串转换为 unsigned long long int

c - 段错误/malloc 错误?

在析构函数中的 main 之后无法读取 exit_code

c - fscanf 无法读取我在 C 中输入的文件的第一个整数,但读取其余部分

c - 取消引用指向不完整类型 tcphdr->members 的指针

c - int x[size]={0} 的行为

Javascript,知道某个值是否在数组中的最快方法?

c - 使用 scanf 读取 uint8_t 数据

c - sscanf() 如何查看字符串中的数字?

c - 带有 char 数组参数的函数