在一个10次的循环中,gets读取9次,换scanf却读取了十次,这是为什么?

#include<stdio.h>
#include<string.h>
#include<conio.h>
struct candidate{
    char name[20];
    int count;
}person[3]={"a",0,"b",0,"c",0};
int main(void)
{
    /*********Begin*********/
	int all;int i = 0;
	char temp[20];
	scanf("%d",&all);//就是这里,如果换gets()就只能读取9次,假设all=10
	for (i; i < all; i++)
	{
		scanf("%s",temp);
		if (strcmp(temp,"a")==0)
		{
			person[0].count++;printf("A");
		}
		if (strcmp(temp,"b")==0)
		{
			person[1].count++;
		}
		if (strcmp(temp,"c")==0)
		{
			person[2].count++;
		}
	}
	for (int j=0;j<3;j++)
		printf("%s:%d\n",person[j].name,person[j].count);
	getch();
    /*********End**********/
    return 0;
}

 

#include <stdio.h>
#include <string.h>
#include <conio.h>
//这是测试代码:2021-03-05-LeeHJ
int main(void)
{
    int scanfTemp = 0;
    char getsTemp[20];
    char *pGets = NULL;

    pGets = gets(getsTemp); //入参是char型指针,这个gets函数不能指定入参
    printf("gets S is %s\r\n", pGets); //gets 入参是字符串的形式,加入输入10 字符串打印是10 但是打印整型 就不是10了
    printf("gets D is %d\r\n", (int)pGets);

    scanf("%d", &scanfTemp); //这里指定了 键盘输入的字符转化为整型,这个函数可以指定入参,因此会根据设置转化
    printf("scanfTemp D is %d\r\n", scanfTemp);
}
//运行结果:
//10 //键盘输入
//gets S is 10
//gets D is 2686756
//10 //键盘输入
//scanfTemp D is 10

gets()是用来读取字符串的,,,

gets()函数原型是char *gets(char *str);他的参数是个char 型指针,,返回的也是一个char型指针

可是就算是返回指针也应该返回十次而不是九次呀!我为此一直头疼呢