我在写一个C程序,用来判断一个数字是否为质数。每次我运行它并输入一个数字时,输入值都会发生变化。PLease指出了漏洞。
#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;
}
}我使用Code::Blocks IDE和GCC编译器
发布于 2015-08-02 19:07:53
getchar返回单个字符的ASCII码。因此,您的程序将拾取您输入的数字的第一个字符的ASCII码,并检查它是否为质数。
相反,您需要读取一个整数:
scanf("%d", &y);完整的程序:
#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;
}
}
}注意:您可以在x >= sqrt(y)时停止
发布于 2015-08-02 19:16:19
好的,您正在调用getchar(),它用于输入单个字符,在您的示例中会发生以下情况:
getchar()返回一个character.int.3将被存储为51,这是输入更改的原因。你需要做的是输入一个整数而不是字符。试试这个:
scanf("%d", &y);希望这能有所帮助。
发布于 2015-08-02 19:19:03
关于y的输入,第一个答案是正确的:
scanf("%d", &y);另外,请注意,你应该循环到x的平方根,如果你想优化你的算法(我不会在这里演示为什么,这是一个数学属性)。
#include <stdio.h>
#include <math.h>
// ...
int x;
int x_max;
int y;
scanf("%d", &y);
x_max = (int)floor(sqrt(y));
for(x=2;x<=x_max;++x){
// ...https://stackoverflow.com/questions/31771211
复制相似问题