!!!我的错误在哪里呀

想用c语言输出从1到n所有数中的素数 (1,2这两个数可能还有点缺陷)但是它为什么只能输出一个1啊 是循环没有进行吗???

#include <stdio.h>
int isprime(int i);
int main()
{
int b;
printf("请输入一个数:");
scanf("%b",&b);
int i;
for(i=1;i<=b;i++){
if(isprime(i)){
printf("%d",i);
}
}
return 0;
}
int isprime(int i){
int a;
int ret=1;
for(a=2;a<i;a++){
if(i%a==0){
ret=0;
break;
}
}
return ret;
}

scanf("%b",&b);改成scanf("%d",&b);

具体代码如下:

#include <stdio.h>
int isprime(int i);
int main()
{
    int b;
    printf("请输入一个数:");
    scanf("%d",&b);
    int i;
    for(i=1;i<=b;i++)
    {
        if(isprime(i))
        {
            printf("%d ",i);
        }
    }
    return 0;
}
int isprime(int i){
    int a;
    int ret=1;
    if(i<2) return 0; //添加这一句
    for(a=2;a<i;a++){
        if(i%a==0)
        {
            ret=0;
            break;
        }
    }
    return ret;
}

有多个问题,改好了:

#include <stdio.h>
int isprime(int i);
int main()
{
int b;
int i;
printf("请输入一个数:");
scanf("%d",&b);

for(i=1;i<=b;i++){
if(isprime(i)){
printf("%3d",i);
}
}
return 0;
}
int isprime(int i){
int a;
int ret=1;
for(a=2;a<i;a++){
if(i%a==0){
ret=0;
break;
}
}
return ret;
}

img
这里出现错误了哦,是%d,是scanf("%d",&b);

scanf("%b",&b); 改成 scanf("%d",&b);

#include <stdio.h>
int isprime(int i);
int main()
{
  int b;
  printf("请输入一个数:");
  scanf("%d",&b);
  int i;
  for(i=2;i<=b;i++)
  {
    if(isprime(i))
    {
      printf("%d",i);
    }
  }
  return 0;
}
int isprime(int i)
{
  for(int a=2;a*a<=i;a++)
  {
    if(i%a==0)
      return 0;
  }
  return 1;
}