请问我这样做哪出了问题,要怎么改才对


#include
int main(){
    int n,i=1,j,count=0;
    int a[1001];
    while(~sacnf("%d",&n)){
        for(i=2;;i++){
            if(n%i==0){
            break;
            }else{
                    a[j++]=i;
                    if(j==1000)break;
                }
            }
        for(j=1;j<=n;j++){
            if(j==1){
            printf("%d",a[j]);
            }else{
                printf(",%d",a[j]);
            }
        }
        
            
                
        }
}

任务描述
编程找出前1000个素数存放到数组中,然后输入一个整数N,输出第N个素数的值。

输入格式:
输入有多组数据,为若干个空格分隔的整数。

输出格式:
对于输入数据中每个n,输出第n个素数的值,多个输出之间以逗号分隔。

输入样例:
1 2 3 4 5 4 3
输出样例:
2,3,5,7,11,7,5
输入样例:
5 8 9 10 100 200
输出样例:
11,19,23,29,541,1223
输入样例:
996 997 998 999 1000
输出样例:
7879,7883,7901,7907,7919

不是sacnf函数,应该改成scanf

你的逻辑有有问题,应该先从2循环到1000找出所有素数,存到数组a中。然后获取输入的n,存放到数组 b中,循环数组b,用j循环,则输出a[j]即可。望采纳

编译下嘛

这个代码里有很多语法错误和逻辑错误。

1.不应该用scanf读入n,而应该用while(scanf("%d", &n) != EOF),表示直到文件结束为止。
2.不应该在循环里面计算素数,而应该在输入之前把前1000个素数存放到数组中。
3.不应该用n%i==0判断是否是素数,而应该用素数筛法。
正确代码如下:

#include <stdio.h>

int main() {
    int n, a[1001], cnt = 0;
    for (int i = 2; cnt < 1000; i++) {
        int flag = 1;
        for (int j = 2; j * j <= i; j++) {
            if (i % j == 0) {
                flag = 0;
                break;
            }
        }
        if (flag) {
            a[cnt++] = i;
        }
    }
    while (scanf("%d", &n) != EOF) {
        printf("%d", a[n - 1]);
        if (n < 1000) {
            printf(",");
        }
    }
    return 0;
}