0

このコードは、コードブロック 10.05 でコンパイルしている間、私の PC で完全に正常に動作します。コードはエラーや警告をまったく出しません! しかし、それをオンラインのコーディング ジャッジ コミュニティに提出すると、コンパイル エラーが返されます。これが私のコードです:

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int j=1;
    while(j=1){
        int x,y,i,j,num,count=0,p,k;
        for(;;){
            printf("enter two integers. they must not be equal and must be between 1 and 100000\n");
            scanf("%d%d",&i,&j);
            if(i>=1 && i<100000 && j>=1 && j<100000 && i!=j){
                break;
            }
            else{
                printf("try the whole process again\n");
            }
        }
        if(i>j){
            x=i;
            y=j;
        }
        else{
            x=j;
            y=i;
        }//making x always greater than y
        int *cyclelength=(int *)malloc(5000*sizeof(int));
        if (NULL==cyclelength){
            printf("process aborted");
            return 0;
        }
        else{
            /*solution part for the range of number. and solution for each number  put into cyclelength.*/
            num=y;
            while(num<=x){
                p=1;
                k=num;
                while(k!=1){
                    if(k%2==0)
                        k=k/2;
                    else
                        k=3*k+1;
                    p+=1;
                    }
                cyclelength[count]=p;
                num+=1;
                count+=1;
            }
            int c=0;
            int max=cyclelength[c];
            for(c=0;c<x-y-1;c+=1){
                if(max<cyclelength[c+1]){
                    max=cyclelength[c+1];
                }
            }
            free(cyclelength);
            cyclelength = NULL;
            printf("%d,%d,%d\n",i,j,max);
        }
    }
}

ANSI C 4.1.2 - オプション付きの GNU C コンパイラーの下でオンライン コミュニティに提出しようとすると、 -lm -lcrypt -O2 -pipe -ansi -DONLINE_JUDGEこの形式になります。彼らは私にコンパイルエラーメッセージを送ります!

Our compiler was not able to properly proccess your submitted code. This is the error returned:
code.c: In function 'main':
code.c:25:10: error: expected expression before '/' token
code.c:27:19: error: 'cyclelength' undeclared (first use in this function)
code.c:27:19: note: each undeclared identifier is reported only once for each function it appears in
code.c:10:18: warning: ignoring return value of 'scanf', declared with attribute warn_unused_result

なぜ私はこれを取得していますか?? 私のせいはどこですか?? コーディング形式が合っていませんか?? 私は初心者です!

4

2 に答える 2

1

-ansiオプションを使用すると、エラーはANSIコンプライアンスの失敗になります。

}//making x always greater than y

する必要があります

} /* making x always greater than y */

26行目; ここでcyclelengthを宣言することはできません。関数の先頭にある必要があります(5行目)

int main()
{
    int *cyclelength;
...
    cyclelength=(int *)malloc(5000*sizeof(int));

scanfの戻り値をチェックしないと、成功したと見なされるため、scanfの問題は警告です。したがって、次のようなことを行う必要があります。

do {
    printf("enter two integers. they must not be equal and must be between 1 and 100000\n");
    number_read = scanf("%d%d", &i, &j);
    if (number_read < 0) /* read failed, e.g. user entered ctrl-d */
        return 0;
    } while (number_read != 2);

number_readもちろん、関数の先頭で宣言する必要があります

于 2012-07-11T07:04:17.390 に答える
0

コードは ANSI C ではありません。C++ や C99 のように、ブロックの途中で変数を定義することはできません。cyclelengthc、などの宣言をmaxそれぞれのブロックの先頭に移動します。厳密な ANSI の場合は、C のみのコメントも使用する必要があります。つまり// comment/* comment */.

于 2012-07-11T07:00:14.917 に答える