C语言在if语句中希望x与i++比较却不希望对i的数值产生变化。

问题遇到的现象和发生背景

C语言在if语句中希望x与i++比较却不希望对i的数值产生变化。

问题相关代码

//此代码是为求解一个数是否为素数。
#include

int main()
{
int x;
scanf("%d",&x);
int i=2;
int prime=1;
while(x%i!=0)
{
if(i++==x)
prime=0;
i++;
}
if (prime==0)
{
printf("为素数");
}
else
{
printf("不为素数");
}
return 0;
}

运行结果及报错内容

每次运行if语句i的值都会变化

那你就别i++了啊
再说你这个逻辑也太莫名了,如果i和x相等,那x%i肯定等于0啊,你在while循环里的if(i++==x)永远不会成立的啊
按照你的主体思路进行修改

#include<stdio.h>
int main()
{
    int x;
    scanf("%d",&x);
    int i=2;
    int prime=1;
    while(i<x)
    {
        if(x%i==0)
        {
             prime=0;
             break;
        }
        i++;
    }
    if (prime==1)
    {
        printf("为素数");
    }
    else
    {
        printf("不为素数");
    }
    return 0;
}

i的值不发生变化??
你得循环条件是x%i!=0,i不变化不是死循环了

C语言在if语句中希望x与i++比较却不希望对i的数值产生变化。那比较时如果时 x 与 i++比较,那么相当于x 和 i先比较,然后i再自增。如果不想再比较过程中让i自增,将i-1即可

修改如下,供参考:

#include<stdio.h>
int main()
{
    int x;
    scanf("%d", &x);
    int i = 2;
    int prime = 1;
    while (x % i != 0 && x > 1) //修改 排除小于 1 的数 
    {
        if ((i+1) == x) //if(i++ == x) 修改
            prime = 0; 
        i++;
    }
    if (prime == 0 || x == 2) //修改  2 为素数
    {
        printf("为素数");
    }
    else
    {
        printf("不为素数");
    }
    return 0;
}


#include<stdio.h>
int main() {
    int x;
    scanf("%d",&x);
    int i=2;
    int prime=1;
    while(x%i!=0) {
        i++;
        if(i==x){
            prime=0;
        }
    }
    if (prime==0) {
        printf("为素数");
    } else {
        printf("不为素数");
    }
    return 0;
}

这么写,先i++然后判断i是否=x。还有个问题就是,这程序输入1判断不了的。

不是直接用i+1么

把比较的i++改成i+1