尝试运行程序以在C中找到给定范围内的质数时出错

时间:2017-06-10 10:55:51

标签: c runtime-error primes

这是C中的一个程序,用于查找指定范围内的所有素数。

#include<stdio.h>
void prime(int low,int high)
{
  int rem,a,b,g;
  printf("The prime numbers in this range are: \n");
  if(low==1)
  low++;
  if(low==0)
  low=low+2;
  for(a=low;a<=high;a++)
  {
    rem=1;
    for(b=2;b<a-1;b++)
    {
      g=a%b;
      rem=rem*g;
    }
    if(rem!=0)
    printf("%d \n",a);
  }
}
int main()
{
  int i,j;
  printf("Enter the lower limit of the range \n");
  scanf("%d",&i);
  printf("Enter the higher limit of the range \n");
  scanf("%d",&j);
  prime(i,j);
  return 0;
}

正在编译程序时没有任何问题,但有一个运行时错误如下:

enter image description here

和第29行是

prime(i,j);

这是渲染的输出:

enter image description here

有人可以告诉我出了什么问题吗?

2 个答案:

答案 0 :(得分:1)

以下提议的代码:

  1. 干净地编译
  2. 检查错误
  3. 使用与OPs代码相同的逻辑(这是错误的)
  4. 一致地缩进代码以便于阅读和理解。
  5. 通过一个空白行分隔代码块(for,if,else,while,do ... while,switch,case,default)的可读性。
  6. 使用有意义的变量名称
  7. 拒绝2,即使这是一个素数
  8. 现在建议的代码:

    https://api.telegram.org/bot<YOUR_API_TOKEN>/setwebhook?url=<HTTPS_url_to send_updates_to>&max_connections=20&allowed_updates=["callback_query","inline_query"]
    

    但是,如果#include <stdio.h> // scanf(), printf(), perror() #include <stdlib.h> // exit(), EXIT_FAILURE void prime( int low, int high ) { int b; int g; int r; printf("The prime numbers in this range are: \n"); for(int a=low; a<=high; a++) { r=0; for(b=2; b<a-1; b++) { g=a%b; if(g==0) break; r++; } if(r==a-3) printf("%d \n",a); } } int main( void ) { int low =60; int high =80; printf("Enter the lower limit of the range \n"); if( 1 != scanf("%d",&low) ) { perror( "scanf for first number failed" ); exit( EXIT_FAILURE ); } // implied else, scanf successful printf("Enter the higher limit of the range \n"); if( 1 != scanf("%d",&high) ) { perror( "scanf for second number failed" ); exit( EXIT_FAILURE ); } // implied else, scanf successful if( low < 0 || low > high ) { printf( "the numbers must be >= 0 and the first number: %d must be <= the second number: %d\n", low, high ); } else { prime( low, high ); } return 0; } 写成如下:

    prime()

    然后代码正常工作(直到达到某些溢出值)

    这是一段最终更正的代码:

    void prime( int low, int high )
    {
        int b;
        int g;
    
        printf("The prime numbers in this range are: \n");
    
        for(int a=low; a<=high; a++)
        {
            for(b=2; b<a-1; b++)
            {
                if( !(g = (a%b) )
                    break;
            }
                if( g )
                    printf("%d \n",a);
        }
    }
    

答案 1 :(得分:0)

我的问题已得到解决,这要归功于我收到的精彩和重要的评论。特别感谢Felix Palmen,Coldspeed,Jack,Weather Vane和其他我忘记提及的人。

最终代码运行良好且运行没有问题如下:

#include<stdio.h>
    void prime(int low,int high)
    {
      int a,b,g,r;
      printf("The prime numbers in this range are: \n");
      if(low==1)
      low++;
      if(low==0)
      low=low+2;
      for(a=low;a<=high;a++)
      {
        r=0;
        for(b=2;b<a;b++)
        {
          g=a%b;
          if(g==0)
          break;
          r++;
        }
        if(r==a-2)
        printf("%d \n",a);
      }
    }
    int main()
    {
      int i,j;
      printf("Enter the lower limit of the range \n");
      scanf("%d",&i);
      printf("Enter the higher limit of the range \n");
      scanf("%d",&j);
      prime(i,j);
      return 0;
    }