C-程序停滞不前



我有一个简单的c程序,该程序占两个整数,给出平均水平,并检查它们是否素数。当我运行它并给用户输入时,程序会停滞不前,直到我击中ESC之前,它不会做任何事情。一旦我击中ESC,它就会给我正确的结果。这是服务器还是我的代码问题?

这是我的代码:

   #include <stdio.h>
  2 #include "prime.h"
  3 
  4 int main()
  5 {
  6         int x, y;
  7         float avg;
  8 
  9         /* Get integers x and y from user */
 10         printf("Please enter two positive integersn");
 11         scanf("%d %d", &x, &y);
 12         scanf("%d", &x, &y);
 13         printf("You typed in %d and %dn", x, y);
 14         avg = (x+y)/2;
 15         printf("The average is: %fn", avg);
 16 
 17       /* Test if x and y are prime */
 18          if(prime(x) == 1)
 19              printf("%d is primen", x);
 20          else
 21              printf("%d is not primen", x);
 22          if(prime(y) == 1)
 23              printf("%d is primen", y);
 24          else
 25              printf("%d is not primen", y);
 26 
 27         return 0;
 28 }

prime.c:

     1 #include "prime.h"
  2 
  3 int prime(int x)
  4 {
  5     int isprime;
  6     int i;
  7 
  8     for(i = sqrt(x); i > 1; i--)
  9         {
 10             if(x % i == 0)
 11 
 12             /* isprime is false*/
 13                 isprime = 0;
 14             else{
 15 
 16             /* isprime is true*/
 17                 isprime = 1;
 18                 }
 19             }
 20    return isprime;
 21 }

谢谢!

您在第12行上有一个额外的scanf,摆脱它:

12    //scanf("%d", &x, &y);

这是您必须击中逃生或再次输入的原因。

最重要的是,您的主要逻辑有一个错误,由于第17行:

isprime = 1;

这说明价值是ISPRIME,即使您发现了另一个可分开的数字。因此,如果您想象经过数字15,它会发现i = 5并说isprime = 0;但是,它将到2并说Isprime = 1;不好。

要解决该问题,请在ISPrime = 0之后添加休息;这样:

isprime = 0;
break;

此外,您可以摆脱其他情况,我们不需要它,如果它是主要的,我们就可以开始。如果您击中任何除数,您知道这不是主要的:

  7     isprime = 1;
  8     for(i = sqrt(x); i > 1; i--)
  9         {
 10             if(x % i == 0)
 11 
 12             /* isprime is false*/
 13                 isprime = 0;
 14                 break;
 15             }

prime.c不会做它缩进的事情,因为由于else子句,iSprime的值取决于检查的最后一个情况,即2它可以错误地将其标记为Prime。以下代码更好。

#include<math.h>
int prime(int x)
{
    int i;
    for(i=sqrt(x);i>1;--i)
        {
         if(x%i==0)
            return 0;
        }
    return 1;
 }

最新更新