问题:对三个二进制数排序
输入三个二进制数,要求将这三个二进制数对应的十进制整数按从小到大的顺序输出。
#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; //返回转换得到的整数结果
}
我将读入字符串的函数由gets()函数改为
scanf("%s%s%s", s1, s2, s3);
后,再次编译运行程序,就能得到正确结果了。
正确结果如图:
虽然用scanf()函数能解决问题,但是不知道为什么使用gets()函数时不能输出正确结果,哪位指点迷津,感谢!。
gets直接读入一行啊,你把三个数写在同一行,只有第一个gets执行了,后面两个gets还在等你输入
而scanf是可以的,空格和换行符是字符串分割符,而gets只认换行符,不认空格的