新手求教改语法错误C?

不太清楚语法哪里错了?

#include <stdio.h>
#include <string.h>

int n = 1000000;
int mark[1000001];
int N, M;
int c, i;
scanf("%d,%d", &N,&M);


int main() {
    int c;
    memset(mark, 0, sizeof(mark));
    mark[0] = 1;
    mark[1] = 1;

    for (c = 2; c * c <= n; c++) {
        if (mark[c] != 1) /*是待筛选的数*/
        {
            for (i = M; i <= n / c; M++)
            {
                mark[c * i] = 1;
            }

        }
    }

    if (mark[c] != 1)
    {
        printf("%d\n", c);
    }

    return 0;
}

Line 8: error: expected declaration specifiers or '...' before string constant
Line 8: error: expected declaration specifiers or '...' before '&' token
Line 8: error: expected declaration specifiers or '...' before '&' token
Line 8: warning: data definition has no type or storage class
Line 8: error: conflicting types for 'scanf'

8个回答

int n = 1000000;
int mark[1000001];
int N, M;
int c, i;
scanf("%d,%d", &N,&M);

这一堆放到main函数里面

很明显,你把
scanf("%d,%d", &N,&M);
放到函数外面了,语法规定scanf只能在函数里面

错误提示都说是第八行的scanf语句出错了嘛,位置放错了,应该放在函数内部,能放在全局的位置。

错处提示中已经说明的很清楚了,第八行的“scanf”。

根据c语言语法规定scanf只能在函数里面!!!

变量在函数外面声明的话,表示这个变量是一个全局变量。

纠正之后的代码为:

 #include <stdio.h>
#include <string.h>

int n = 1000000;
int mark[1000001];
int N, M;
int c, i;
int main() {
    scanf("%d,%d", &N,&M);
    int c;
    memset(mark, 0, sizeof(mark));
    mark[0] = 1;
    mark[1] = 1;

    for (c = 2; c * c <= n; c++) {
        if (mark[c] != 1) /*是待筛选的数*/
        {
            for (i = M; i <= n / c; M++)
            {
                mark[c * i] = 1;
            }

        }
    }

    if (mark[c] != 1)
    {
        printf("%d\n", c);
    }

    return 0;
}

scanf语句应该放在主函数里面

第一,scanf函数应该放在main函数里面。第二,虽然没报错,但是你定义了两个c变量

scanf放到main函数啊

scanf放到主函数中

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐