C语言中的素数或完全数程序

C语言中的素数或完全数程序,c,C,我做了一个程序,检查给定的正整数是素数还是完美数。我面临的问题是我创建了一个函数“readNumber”这就像一个检查循环,以确保输入是一个正整数。但如果我输入一个负值,然后输入一个可接受的值,它也会显示以前的值。我附加了一个命令提示文本的屏幕截图,以使自己更清楚 下面是我的代码 #include<stdio.h> int checkperfectnumber(int); int checkprimenumber(int); int readNumber(int)

我做了一个程序,检查给定的正整数是素数还是完美数。我面临的问题是我创建了一个函数“readNumber”这就像一个检查循环,以确保输入是一个正整数。但如果我输入一个负值,然后输入一个可接受的值,它也会显示以前的值。我附加了一个命令提示文本的屏幕截图,以使自己更清楚

下面是我的代码

#include<stdio.h>

  int checkperfectnumber(int);
 
  int checkprimenumber(int);

  int readNumber(int);

int main(){
          int num, x, y, result;

          printf("\nGive a positive integer number: \n");
          scanf("%d",&num);

          y = readNumber(num);

          x = checkperfectnumber(num);

          result = checkprimenumber(num);


          if (num == 1)
          printf("1 is nor a prime neither a perfect number");
          else if (x == num)
          printf("%d is a perfect number\n",num);
          else if ( result == 1 )
          printf("%d is a prime number.\n", num);
          else
          printf("%d is nor prime neither a perfect number.\n", num);
          return 0;

          }

          //perfect number function
          int checkperfectnumber(int numbr){
          int a=1, sum=0;
          while(a < numbr){
          if(numbr % a == 0)
          sum=sum+a;
          a++;
          }
          return(sum);
          }

          //prime number function
          int checkprimenumber(int a)
          {
          int c;
          for ( c = 2 ; c <= a - 1 ; c++ )
          {
          if ( a%c == 0 )
          return 0;
          }
          return 1;
          }

          //input check function
          int readNumber(int b){
          while (b < 0)
            {
            printf("Wrong input.\nPlease insert a positive integer.");
            main();
            break;
            }


          }

#包括
整数(int);
整数校验素数(int);
整数读入数(int);
int main(){
int num,x,y,result;
printf(“\n请输入一个正整数:\n”);
scanf(“%d”和&num);
y=读取编号(num);
x=检查完成数(num);
结果=检查素数(num);
如果(num==1)
printf(“1不是素数,也不是完全数”);
else if(x==num)
printf(“%d是一个完美的数字\n”,num);
else if(结果==1)
printf(“%d”是质数。\n“,num);
其他的
printf(“%d”不是素数,也不是完全数。\n“,num);
返回0;
}
//完全数函数
整数checkperfectnumber(整数编号){
int a=1,sum=0;
while(a对于(c=2;c的快速修复方法是在执行
readNumber()
中的
main()
后退出程序。 为此,在函数
readNumber()
中添加
#包括
并替换
break;
,以
退出(0);

更好的解决方案是让函数
readNumber()
,而不是
main()
,读取数字并停止递归调用
main()
。 它将是这样的:

#include<stdio.h>

int checkperfectnumber(int);

int checkprimenumber(int);

int readNumber(void);

int main(){
    int num, x, y, result;

    printf("\nGive a positive integer number: \n");

    num = readNumber();

    x = checkperfectnumber(num);

    result = checkprimenumber(num);


    if (num == 1)
        printf("1 is nor a prime neither a perfect number");
    else if (x == num)
        printf("%d is a perfect number\n",num);
    else if ( result == 1 )
        printf("%d is a prime number.\n", num);
    else
        printf("%d is nor prime neither a perfect number.\n", num);
    return 0;

}

//perfect number function
int checkperfectnumber(int numbr){
    int a=1, sum=0;
    while(a < numbr){
        if(numbr % a == 0)
        sum=sum+a;
        a++;
    }
    return(sum);
}

//prime number function
int checkprimenumber(int a)
{
    int c;
    for ( c = 2 ; c <= a - 1 ; c++ )
    {
        if ( a%c == 0 )
        return 0;
    }
    return 1;
}

//input check function
int readNumber(void){
    for (;;)
    {
        int b;
        scanf("%d",&b);
        if (b >= 0) return b; /* 0 is not positive, but this condition is !(b < 0) */
        printf("Wrong input.\nPlease insert a positive integer.");
    }
}
#包括
整数(int);
整数校验素数(int);
int readNumber(无效);
int main(){
int num,x,y,result;
printf(“\n请输入一个正整数:\n”);
num=readNumber();
x=检查完成数(num);
结果=检查素数(num);
如果(num==1)
printf(“1不是素数,也不是完全数”);
else if(x==num)
printf(“%d是一个完美的数字\n”,num);
else if(结果==1)
printf(“%d”是质数。\n“,num);
其他的
printf(“%d”不是素数,也不是完全数。\n“,num);
返回0;
}
//完全数函数
整数checkperfectnumber(整数编号){
int a=1,sum=0;
while(a
您的屏幕截图是文本的,它应该是文本的。@Danielvarrell您说得对谢谢
main
递归调用
main
看起来不对……您可以使用
edit
按钮将纯文本的屏幕截图替换为纯文本。您能解释一下“;”的用途吗inside for?@EvangelosNikolopoulos,这是一个正常的
for
循环,没有任何初始化、条件或循环后操作。它只是无休止地运行,除非您中断/返回它。