jxjqdb 发表于 2016-11-11 12:16:27

判断素数的程序,输入字符后,死循环。

判断素数的程序,一旦输入字符就可能死循环。求在不改变求素数功能的情况下,解决死循环的办法。最好能判断输入的是非法字符,从而让程序报错。谢谢各位了!!!
代码如下

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

int main()
{
        int a,n,b;
        float sz;

        printf("请输入一个正整数\n");
        scanf("%f",&sz);
        b=0;
        while(sz < 0||sz != (int)sz)
        {       
                printf("输入错误\n请输入一个小于20亿的正整数\n");
                scanf("%f",&sz);
        }
        (int)sz;
        if(sz == 1 ||sz == 0 )
        {printf("您输入的数既不是素数也不是合数\n");}
        else{
        a=2;
        n=1;
        if(sz == 2)
        {printf("您输入的数是素数\n");}
        else
        {while((int)sz%a != 0)
        {
                a=2*n+1;
                n=n+1;
        }
        if(sz == a)
        {printf("您输入的数是素数\n");}
        else
        {printf("您输入的数是合数\n");}
        }}
        system("pause");
        return 0;
}

n0noper 发表于 2016-11-11 13:07:03

为什么要用浮点数呢?

以前我记得测试过,

float f = 1;
if (1 == f)
{
//这里不一定进的来
}

楼主有兴趣可以搜索一下浮点数在内存中的存储形式

椛灬椛落 发表于 2016-11-11 15:54:37

n0noper 发表于 2016-11-11 13:07
为什么要用浮点数呢?

以前我记得测试过,


不是可能进不来。。应该是一定进不来的,计算机保存浮点数是有误差的。。如果要这么做的话
fabs(f)-fabs(1)<1e-6;
页: [1]
查看完整版本: 判断素数的程序,输入字符后,死循环。