ljm002 发表于 2022-4-6 17:56:26

请问一下各位大佬,为什么不管输入任何值最终都只会执行else凡的结果

#include<stdio.h>
int fun(int *b);
void main()
{
        int a,*p1=&a;
        printf("请输入一个数:");
        scanf("%d",&a);
        fun(p1);
        if(fun(p1)==1)
        printf("%d是素数\n",a);
        else
        printf("%d不是素数\n",a);
       
}
int fun(int *b)
{
        int i,n=0;
        for(i=2;i<*b;i++)
        {
                if(*b%i==0);
                break;
      if(i>=*b)
                n=1;
        }
        return n;
}

jhq999 发表于 2022-4-6 18:08:14

for(i=2;i<*b;i++)
      {
                if(*b%i==0)////////////////;
                break;
      if(i>=*b)
                n=1;
      }

isdkz 发表于 2022-4-6 18:46:17

#include<stdio.h>
int fun(int *b);
void main()
{
      int a,*p1=&a;
      printf("请输入一个数:");
      scanf("%d",&a);
      fun(p1);
      if(fun(p1)==1)
      printf("%d是素数\n",a);
      else
      printf("%d不是素数\n",a);
      
}
int fun(int *b)
{
      int i,n=0;
      for(i=2;i<*b;i++)
      {
                if(*b%i==0);    // 这里问什么要有个 ; ?
                break;
      if(i>=*b)            // for 循环里的循环条件是 i < *b,所以在循环里 i 怎么会大于等于 *b 呢
                n=1;
      }
      return n;
}

ljm002 发表于 2022-4-6 19:09:48

isdkz 发表于 2022-4-6 18:46
#include
int fun(int *b);
void main()


你好,谢谢您的回答。第一个if是当*b被for循环任何一个数整除时,就说明不是素数,因为素数是除了1和它本身,没有另外的数
第二个问题您的说的很对,不应该把它放在for循环里
我的想法是想用return 的返回值在主调函数里面使用if判断

isdkz 发表于 2022-4-6 19:11:40

本帖最后由 isdkz 于 2022-4-6 19:12 编辑

ljm002 发表于 2022-4-6 19:09
你好,谢谢您的回答。第一个if是当*b被for循环任何一个数整除时,就说明不是素数,因为素数是除了1和它本 ...

第一个我不是指的 if,而是 if 后面有分号就是 if 语句已经结束了,跟后面的 break 就扯不上关系了,

也就是无论如何,你的 break 都会在第一次循环执行。

ljm002 发表于 2022-4-6 19:16:20

jhq999 发表于 2022-4-6 18:08


你好,我觉得下面的朋友第二点说的很对,i的条件在第二个if里有矛盾,但也谢谢你的回答

ljm002 发表于 2022-4-6 19:19:13

isdkz 发表于 2022-4-6 19:11
第一个我不是指的 if,而是 if 后面有分号就是 if 语句已经结束了,跟后面的 break 就扯不上关系了,
...

太感谢你了,我看了一下午都没发现多打了一个分号,是我眼神不好
页: [1]
查看完整版本: 请问一下各位大佬,为什么不管输入任何值最终都只会执行else凡的结果