xiaohuanghuang_
xiaohuanghuang_
采纳率85.7%
2021-03-04 22:50

在一个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;
}
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • xiaohuanghuang_ xiaohuanghuang_ 1月前

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

    点赞 评论 复制链接分享
  • qq_43414873 小白小白你好菜 1月前

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

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

    点赞 评论 复制链接分享
  • Britripe _WindChimes 1月前
    #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
    点赞 评论 复制链接分享