问题遇到的现象和发生背景
问题:对三个二进制数排序
输入三个二进制数,要求将这三个二进制数对应的十进制整数按从小到大的顺序输出。
问题相关代码,请勿粘贴截图
#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; //返回转换得到的整数结果
}
运行结果及报错内容
编译无报错,但是我运行之后输入3个二进制数 1111, 1110, 1101后,按下回车键没有反应。又按下两次回车键后给了我一个错误结果(图中白线圈住部分)
我的解答思路和尝试过的方法
我将读入字符串的函数由gets()函数改为
scanf("%s%s%s", s1, s2, s3);
后,再次编译运行程序,就能得到正确结果了。
正确结果如图:
我想要达到的结果
虽然用scanf()函数能解决问题,但是不知道为什么使用gets()函数时不能输出正确结果,哪位指点迷津,感谢!。