m0_73947854 2022-10-01 20:39 采纳率: 100%
浏览 46
已结题

scanf与直接赋值

当直接给n,m赋值时,素数正常输出,结果输出也是正确的
而使用scanf给n,m赋值后,结果就变成了0,且素数也不再输出
想问一下程序的问题出在了哪?

/*
现在,给定两个整数n和m,0<n<=m<=200,
你的程序要计算第n个素数到第m个素数之间所有的素数的和
包括第n个素数和第m个素数。
*/


#include <stdio.h>

int main ()
{
    int x,i,n,m,a=0;
    int total,stop;

   scanf("%d %d",&n,&m);      //读取n,m的值 
 
    for (x=2;x>0;x++)         //取素数 
    {
        
        int bian = 1;
        
        for (i=2;i<x;i++)
        {
            if (x % i == 0)
            {
                bian = 0;   //当 x 不为素数时,则将变量bian赋值为 0 
                break;
            }
        }    
        if (bian == 1)   //当 x 为素数时,进入判断 
        {
            a++;
            
            if (a>=n)    //n个素数到第m个素数之间所有的素数的和
            {
             if (a<=m)
             {
                 total = x + total;            
                 printf("%d",x);
             }
             if (a > m)     //当取到第m个素数时退出循环 
             {
                 stop = 0;
                 break;
             }
            }    
        } 
          if (stop) break;
    }
    
    printf("%d",total);    
                
    return 0;
}

        

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-10-02 00:02
    关注

    这里问题不在scanf() 输入部分,修改处见注释,供参考:

    /*
    现在,给定两个整数n和m,0<n<=m<=200,
    你的程序要计算第n个素数到第m个素数之间所有的素数的和
    包括第n个素数和第m个素数。
    */
     
     
    #include <stdio.h>
     
    int main ()
    {
        int x,i,n,m,a=0;
        int total = 0,stop = 1; //修改 初始化两数
    
        scanf("%d %d",&n,&m);
    
        for (x=2;x>0;x++)
        {
            
            int bian = 1;
            
            for (i=2;i<x;i++)
            {
                if (x % i == 0)
                {
                    bian = 0;   
                    break;
                }
            }    
            if (bian == 1)
            {
                a++;
    
                if (a>=n && a <= m)//修改
                {
                 //if (a<=m)  修改
                 //{          修改
                     total = x + total;
                     printf("%d ",x);
                 }
                 else if (a > m) // 修改
                 {
                     stop = 0;
                     break;
                 }
                 //}  修改
            } 
            if (!stop) break;  //修改  if (stop)
        }
        printf("\n%d",total);  //修改
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月10日
  • 已采纳回答 10月2日
  • 创建了问题 10月1日