在C中查找是否为Prime的数字

Muk*_*hta 3 c primes

我正在编写一个C程序来查找数字是否为素数.每当我运行它并输入一个数字时,输入的值就会改变.请指出漏洞.

#include<stdio.h>
#include<conio.h>
int main()
{

    int x;
    int y;
    y=getchar();
    for(x=2;x<y;++x){
       if(y%x != 0 && y!=x)
            printf(" THE NUMBER %d is  A  PRIME \n", y);
        else
            printf(" \r THE NUMBER %d IS NOT A PRIME", y);
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用Code :: Blocks IDE和GCC Compiler

Tar*_*rik 5

getchar返回单个字符的ASCII码.因此,您的程序会获取您输入的数字的第一个字符的ASCII代码,并检查它是否为素数.

相反,您需要读取整数:

scanf("%d", &y);
Run Code Online (Sandbox Code Playgroud)

完整的计划:

#include<stdio.h>
#include<conio.h>
int main()
{

    int x;
    int y;
    scanf("%d", &y);
    for(x=2;x<y;++x){
       if(y%x != 0 && y!=x)
            printf(" THE NUMBER %d is  A  PRIME \n", y);
       else {
            printf(" \r THE NUMBER %d IS NOT A PRIME", y);
            break;
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:您可以在何时停止 x >= sqrt(y)


Yu *_*Hao 5

顾名思义,getchar()从标准输入中获取单个字符.例如,如果输入3,则y获取字符的ASCII码'3',这显然不是您想要的.

试试scanf:

scanf("%d", &y);
Run Code Online (Sandbox Code Playgroud)

  • @MukulMehta使用循环? (2认同)