小妹跪求大神指教一下,谢谢!

10分)编写一个程序,将用户输入的十进制短整型正数n转换成二进制数。如果用户输入负数或者读入错误,则要求用户重新输入。
输入提示信息:"n="
**输入格式:"%hd" /* short 类型 /
输出信息:"the binary number is "
*
输出格式要求:"%d"
程序运行示例如下:
n=37
the binary number is 0000000000100101
小妹的程序代码如下:
#include
int main()
{
printf("n=");
short int n;
do
{
scanf("%hd",&n);
}while(scanf("%hd",&n)!=1||n<0);
printf("the binary number is ");
while(n!=1)
{
printf("%d",n%2);
n=n/2;
}
printf("%d",n);
return 0;
}
输入之后好像没反应的啦!求大神指教。

你用一个do-while循环处理输入,判断条件是输入,循环体还是输入,这样很可能就会无限输入下去,最好是用一个循环包括整个过程,每次有输入就处理一次输入的情况,根据你的代码修改如下:

 #include<stdio.h>
int main()
{
    short int n;
    while(true)
    {
        printf("n=");
        scanf("%hd",&n);
        if(n<0)
        {
            continue;
            printf("Please input again!");
        }
        printf("the binary number is ");
        while(n!=1)
        {
            printf("%d",n%2);
            n=n/2;
        }
        printf("%d",n);
        printf("\n");
    }
    return 0;
}

当然了,按照你现在的实现算法,计算出来的二进制数字是反过来的,你可以再想个办法让二进制数正过来,这件事也不难

这是我写的,二进制输出我暂时只想到用数组来倒序输出。
#include
void main()
{
short int n;
int a[30],i=0; //定义一个数组 用来存储二进制数
for(i=0;i a[i]=0;
}
i=0;
printf("输入一个十进制数:");
do{
scanf("%hd",&n);
} while(n if(n==1){
printf("The binary number is 00000001");
}
while(n>0){ //将余数存在数组里面
a[i]=n%2;
n=n/2;
i++;
}
for(i=29;i>=0;i--){ //倒序输出二进制数
printf("%d",a[i]);
}
}

你这个有一个小问题,当输入为字母时将造成死循环,因为%d不能读取字符,但这个错误输入一直在缓冲区,所以加一个getchar()就好了。

#include<stdio.h>
int main()
{
    int i,j,a,b,n[16]={0};
    do
    {
        printf("n=");
        b=scanf("%d",&a);
        if(b!=1)
        {
            getchar();
        }
    }while(a<0||b!=1);
    printf("%d%d\n",a,b);
    for(i=0;i<16;i++)
    {
        n[i]=a%2;
        a/=2;
    }
    printf("the binary number is ");
    for(i=15;i>=0;i--)
    {
        printf("%d",n[i]);
    }
    return 0;
}