在3个二进制数排序中,用gets()函数读取不到字符

问题遇到的现象和发生背景

问题:对三个二进制数排序
输入三个二进制数,要求将这三个二进制数对应的十进制整数按从小到大的顺序输出。

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<string.h>
#define N 100

int BToD(char str[N]);  //进制转换

int main()
{

    char s1[N],s2[N],s3[N];
    int a, b, c, temp;

//    读入3个二进制数
      gets(s1);
      gets(s2);
      gets(s3);

    a = BToD(s1);         // 调用进制转换函数接受整数
    b = BToD(s2);
    c = BToD(s3);

    if(a >b) //进行从大到小的排序
    {
        temp = a; a = b; b = temp;
    }
    if(a > c)
    {
        temp = a; a = c; c = temp;
    }
    if(b > c)
    {
        temp = b; b = c; c = temp;
    }

    printf("%d %d %d", a, b, c);//按从大到小顺序输出
    return 0;
}

//把一个二进制字符串转换成对应的十进制整数
int BToD(char str[N])
{
    int i, d = 0;
    int len;
    len = strlen(str);           //获取字符数组长度

    for(i=0; i < len; i++)
        d = d*2 + (str[i] - '0');

    return d;                    //返回转换得到的整数结果
}

运行结果及报错内容

img

img


编译无报错,但是我运行之后输入3个二进制数 1111, 1110, 1101后,按下回车键没有反应。又按下两次回车键后给了我一个错误结果(图中白线圈住部分)

我的解答思路和尝试过的方法

我将读入字符串的函数由gets()函数改为

scanf("%s%s%s", s1, s2, s3);

后,再次编译运行程序,就能得到正确结果了。
正确结果如图:

img

我想要达到的结果

虽然用scanf()函数能解决问题,但是不知道为什么使用gets()函数时不能输出正确结果,哪位指点迷津,感谢!。

gets直接读入一行啊,你把三个数写在同一行,只有第一个gets执行了,后面两个gets还在等你输入
而scanf是可以的,空格和换行符是字符串分割符,而gets只认换行符,不认空格的

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632