我正在编写一个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
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)
顾名思义,getchar()从标准输入中获取单个字符.例如,如果输入3,则y获取字符的ASCII码'3',这显然不是您想要的.
试试scanf:
scanf("%d", &y);
Run Code Online (Sandbox Code Playgroud)