#include
#include
#include
#include
int main(void)
{
bool isPrime;//像这种只用取两个值,只用占一个字节的变量就可以设置成bool类型
long num;//为了扩大num可以取值的范围,故使用long型的变量
while (isPrime=true,scanf("%ld",&num)==1)//一定要记得,long型变量的转换说明对应的不应该是%l而应该是%ld !!!!!!!!
{
for (long i = 2; (i*i) <= num; i++)
{
if (num%i == 0)
{
isPrime = false;
if ((i*i) == num)
{
printf("%ld is %ld的因数\n", i, num);
}
else
printf("%ld and %ld is %ld 的因数\n", i, num / i, num);
}
}
if (isPrime)
{
printf("%ld is prime\n", num);
}
printf("press a digit to continue or press a nonnumeric to quit:");
}
printf("bey~\n");
system("pause");
return 0;
}
问题一:为什么不能这样去精简代码?while(isPrime=true,scanf("%lf",&num),isdigit(num))~
这里就涉及到了<ctype.h>中的函数的参数应该为什么的问题了。
======测试函数:isdigit(),isalnum(),isalpha(),iscntrl(),isgraph(),isprint(),isblank(),isspace()isupper(),islower()等
=======函数参数为测试字符,函数返回值为1、0
ctype.h
======映射函数:toupper(),tolower()等
========函数参数为测试字符,返回值为测试字符或映射字符
**********************************************************************************************
所以ctype.h中的函数参数应该是字符~
**********************************************************************************************
问题2:为什么while(isPrime=true,(scanf("%l",&num))==1)不行
这里一定要切记切记嘛~ long的转换说明应该是%ld,如果以八进制打印就应该是%lo
反正不是%l啦
问题三:为什么使用了<stdbool.h>头文件使用的是bool而不是_Bool呢
这里需要知道一个知识点,因为stdbool.h里有一个宏定义是#define bool _Bool
所以只能用bool,使用_Bool会报错的~~