为什么for和while中的判断部分不能用函数来写,if却可以,有什么好办法吗?

时间:2022-09-12 14:50:45
下面程序中的 for 和while 都不能运行
    int i,a = 16;
    i=3;
    // for(i=3;IsPrime(i);i++)
    while(IsPrime(i)){
    printf("%d is a lucky number.\n",i);
    i++;
    }
分开写成
while(1){
if(IsPrime(i)){...}
}
   就没问题

这是怎么回事
但是,我们怎么总是写成while(scanf("%d",&n) != -1)?
其中,IsPrime函数如下
int IsPrime(int n)
{
    double k;
    int i;
    k = sqrt(n);
    for(i=2;i<k+1;i++){
        if(n%i == 0) return 0;
    }
    return 1;
}
还有,要怎样才能用bool,
写成1,0,看起来很别扭,还是true/false比较顺

谢谢~~

10 个解决方案

#1


18 #include <stdlib.h>
 19 #include <stdio.h>
 20 
 21 
 22 int test_func(int n)
 23 {    
 24     if (n > 0)
 25         return 1;
 26     else
 27         return 0;
 28 }
 29 int main(void )
 30 {   
 31     int i = 3;
 32     while( test_func(i) ) //测试代码 ,这里是OK的
 33     {   
 34         printf("OK\n");
 35         break;
 36     }
 37     printf("return \n");
 38  
 39     return 0;
 40 }


第二个问题:
至于bool类型
你自己可以定义的
#define _false 0
#defien _true 1

#2


谁说的?SDK中消息循环就是一个典型的例子
while(GetMessage(&msg,0,0,0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

#3


c中要用bool型可以宏定义:

#define bool int
#define TRUE 1
#define FALSE 0

至于循环的判断部分用函数来写,完全可以嘛,我用楼主的代码跑了下,没问题,有图有真相:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int IsPrime(int n);

int main(void)
{
    int i,a = 16;
    i=3;
    // for(i=3;IsPrime(i);i++)
    while(IsPrime(i)){
printf("%d is a lucky number.\n",i);
i++;
    }
system("pause");
}

int IsPrime(int n)
{
    double k;
    int i;
    k = sqrt((double)n);
    for(i=2;i<k+1;i++){
        if(n%i == 0) return 0;
    }
    return 1;
}


运行结果:
为什么for和while中的判断部分不能用函数来写,if却可以,有什么好办法吗?

#4


问题在其他地方,在if,while,和for中都可以使用函数调用表达式。 

#5


你的需求决定了,你要这么写。 
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int IsPrime(int n);

int main(void)
{
    int i;
  
     //输出2~16间的质数
     for(i=2;i < 16;i++)
        if(IsPrime(i)){
printf("%d is a lucky number.\n",i);
i++;
        }
        //else;

}

int IsPrime(int n)
{
    double k;
    int i;
    k = sqrt((double)n);
    for(i=2;i<k+1;i++){
        if(n%i == 0) return 0;
    }
    return 1;
}

#6


typedef enum { false=0, true=!false } bool;

#7


引用 6 楼 zhaokai115 的回复:
typedef enum { false=0, true=!false } bool;
大神啊 膜拜

#8


for (A;B;C) D;
//等价于
{
 A;
 while (1) {
  if (!(B)) break;
  D;
  C;
 }
}

#9


引用 3 楼 dnvycumt3 的回复:
c中要用bool型可以宏定义:

#define bool int
#define TRUE 1
#define FALSE 0

至于循环的判断部分用函数来写,完全可以嘛,我用楼主的代码跑了下,没问题,有图有真相:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int IsPrime(int n);

int main(void)
{
    int i,a = 16;
    i=3;
    // for(i=3;IsPrime(i);i++)
    while(IsPrime(i)){
printf("%d is a lucky number.\n",i);
i++;
    }
system("pause");
}

int IsPrime(int n)
{
    double k;
    int i;
    k = sqrt((double)n);
    for(i=2;i<k+1;i++){
        if(n%i == 0) return 0;
    }
    return 1;
}


运行结果:
为什么for和while中的判断部分不能用函数来写,if却可以,有什么好办法吗?


ok!
函数写的有点乱,有点写错了。现在搞定了~~
谢谢

#10


最新的C标准好像支持bool型。

#1


18 #include <stdlib.h>
 19 #include <stdio.h>
 20 
 21 
 22 int test_func(int n)
 23 {    
 24     if (n > 0)
 25         return 1;
 26     else
 27         return 0;
 28 }
 29 int main(void )
 30 {   
 31     int i = 3;
 32     while( test_func(i) ) //测试代码 ,这里是OK的
 33     {   
 34         printf("OK\n");
 35         break;
 36     }
 37     printf("return \n");
 38  
 39     return 0;
 40 }


第二个问题:
至于bool类型
你自己可以定义的
#define _false 0
#defien _true 1

#2


谁说的?SDK中消息循环就是一个典型的例子
while(GetMessage(&msg,0,0,0))
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

#3


c中要用bool型可以宏定义:

#define bool int
#define TRUE 1
#define FALSE 0

至于循环的判断部分用函数来写,完全可以嘛,我用楼主的代码跑了下,没问题,有图有真相:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int IsPrime(int n);

int main(void)
{
    int i,a = 16;
    i=3;
    // for(i=3;IsPrime(i);i++)
    while(IsPrime(i)){
printf("%d is a lucky number.\n",i);
i++;
    }
system("pause");
}

int IsPrime(int n)
{
    double k;
    int i;
    k = sqrt((double)n);
    for(i=2;i<k+1;i++){
        if(n%i == 0) return 0;
    }
    return 1;
}


运行结果:
为什么for和while中的判断部分不能用函数来写,if却可以,有什么好办法吗?

#4


问题在其他地方,在if,while,和for中都可以使用函数调用表达式。 

#5


你的需求决定了,你要这么写。 
#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int IsPrime(int n);

int main(void)
{
    int i;
  
     //输出2~16间的质数
     for(i=2;i < 16;i++)
        if(IsPrime(i)){
printf("%d is a lucky number.\n",i);
i++;
        }
        //else;

}

int IsPrime(int n)
{
    double k;
    int i;
    k = sqrt((double)n);
    for(i=2;i<k+1;i++){
        if(n%i == 0) return 0;
    }
    return 1;
}

#6


typedef enum { false=0, true=!false } bool;

#7


引用 6 楼 zhaokai115 的回复:
typedef enum { false=0, true=!false } bool;
大神啊 膜拜

#8


for (A;B;C) D;
//等价于
{
 A;
 while (1) {
  if (!(B)) break;
  D;
  C;
 }
}

#9


引用 3 楼 dnvycumt3 的回复:
c中要用bool型可以宏定义:

#define bool int
#define TRUE 1
#define FALSE 0

至于循环的判断部分用函数来写,完全可以嘛,我用楼主的代码跑了下,没问题,有图有真相:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

int IsPrime(int n);

int main(void)
{
    int i,a = 16;
    i=3;
    // for(i=3;IsPrime(i);i++)
    while(IsPrime(i)){
printf("%d is a lucky number.\n",i);
i++;
    }
system("pause");
}

int IsPrime(int n)
{
    double k;
    int i;
    k = sqrt((double)n);
    for(i=2;i<k+1;i++){
        if(n%i == 0) return 0;
    }
    return 1;
}


运行结果:
为什么for和while中的判断部分不能用函数来写,if却可以,有什么好办法吗?


ok!
函数写的有点乱,有点写错了。现在搞定了~~
谢谢

#10


最新的C标准好像支持bool型。