古墓派 2022-03-01 18:36 采纳率: 100%
浏览 15
已结题

在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()函数时不能输出正确结果,哪位指点迷津,感谢!。

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-03-01 18:42
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月9日
  • 已采纳回答 3月1日
  • 创建了问题 3月1日

悬赏问题

  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 Macbookpro 连接热点正常上网,连接不了Wi-Fi。
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题