c语言中素数的输出问题

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

dotcpp的习题
计算n以内的所有素数和
编写程序,计算输入的n以内的所有素数之和。
输入格式: "%d"
输出格式:"sum=%d\n"

用代码块功能插入代码,请勿粘贴截图

#include
int main()
{
int n;
scanf("%d",&n);
int sum=0,x,i;
int flag=0; //素数为1

for(x=2;x<=n;x++)
{
    flag=0;
    if(x==2)
    {
        flag=1;
    }
    for(i=2;iif(x%i==0)
        {
            break;
        }
        else if(x%i!=0)
        {
            flag=1;
            break;
        }    
    }
    if(flag==1)
    {
        sum+=x;
    }
}
printf("sum=%d\n",sum);
return 0;

}

运行结果及报错内容

运行错误,但不清楚为什么?

我的解答思路和尝试过的方法

调试程序的时候在n=10时该程序会把9算成素数,但我不清楚为什么,求解?
求原因。

//判断是否为素数
#include<stdio.h>
int main()
{
    int i,x;
    scanf("%d",&x);
    if(x==2) puts("yes!");
    if(x>2)
    {
        for(i=2;i<x;i++)
            if(x%i==0)
            {
                puts("no!");
                break;//一旦判断不是,跳出循环
            }
        if(i==x) puts("yes!");//如果是的话,for循环一定执行到了i=x
    }
    else puts("no!");
}

x%i不为0不应该退出循环,为0才退出循环且flag为变为0
flag初始值应该是1,按照题主的思路

写的都不够好 循环条件应该是到开方n或者到n/2

不知道什么原因我试了上述的方法,仍然不管用。同时在我调试时发现n=10时9会被当做素数?不清楚