7

プログラムをC言語でコンパイルしようとしているときに、いくつかの警告があります。

13:20: warning: excess elements in array initializer [enabled by default]

13:20: warning: (near initialization for ‘litera’) [enabled by default]

22:18: warning: excess elements in array initializer [enabled by default]

22:18: warning: (near initialization for ‘liczba’) [enabled by default]

43:1: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat]

45:2: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat]

55:2: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat]

ソースは次のとおりです。

char litera[63] = {'E', 'G', 'H', 'F', 'E', 'G', 'H', 'F',
                   'D', 'B', 'A', 'C', 'D', 'B', 'A', 'C', 
                   'B', 'A', 'C', 'D', 'C', 'A', 'B', 'D', 
                   'F', 'H', 'G', 'E', 'F', 'H', 'G', 'E', 
                   'C', 'D', 'B', 'A', 'B', 'A', 'C', 'D', 
                   'F', 'E', 'G', 'H', 'G', 'H', 'F', 'G', 
                   'H', 'F', 'E', 'F', 'H', 'G', 'E', 'C',
    /*line13:*/    'A', 'B', 'D', 'C', 'A', 'B', 'D', 'E'};

int liczba[63] ={'8', '7', '5', '6', '4', '3', '1', '2', 
                 '1', '2', '4', '3', '5', '6', '8', '7', 
                 '5', '7', '8', '6', '4', '3', '1', '2', 
                 '1', '2', '4', '3', '5', '6', '8', '7', 
                 '6', '8', '7', '5', '3', '1', '2', '4', 
                 '3', '1', '2', '4', '6', '8', '7', '5', 
                 '7', '8', '6', '4', '3', '1', '2', '1', 
    /*line22*/   '2', '4', '3', '5', '6', '8', '7', '5'};


int i=0, x=0, n;
char a;
int b=0;
printf("Podaj literę z pola startowego skoczka(duże litery)\n");
scanf("%s", &a);
printf("Podaj liczbę z pola startowego skoczka \n");
scanf("%d", &b);

if (b<=0 || b>8){
    printf("Zła pozycja skoczka\n");
    return 0;
    }

while (litera[i] != a || liczba[i] != b){
    ++i;
    }
n=i;

/*line43*/ printf("Trasa skoczka od punktu %s %d to:\n", a, b); 
while (i<=64){
/*line45*/ printf("%s%d ", litera[i], liczba[i]);
    ++i;

    ++x;
    x=x%8;
    if(x==0)
        printf("/n");
    }
i=0;
while (i<n){
/*line55*/ printf("%s%d ", litera[i], liczba[i]);

    ++i;

    ++x;
    x=x%8;
    if(x==0)
        printf("/n");
    }

また、後に「コアダンプ」scanf("%d", &b);int b=0;ありますが、問題はありません...

4

3 に答える 3

8

ここでの2つのエラー:最初に、配列のサイズ( )と可能な最大のインデックス値(つまり)をarrays[63]混同している可能性があるため、64個の要素を格納することを宣言しようとしています。だからそれは間違いなくそうあるべきですそして。ところで、この行も変更する必要があります- :そうしないと、65番目の要素にアクセスしようとすることになります。nn - 1litera[64]liczba[64]while (i<=64)

次に、ここで使用する必要があるのに、scanfのフォーマット指定子でchar値を入力しようとしています。%s%c

また、なぜ配列をsliczbaを格納する配列として宣言し、sのint配列で初期化するのか疑問に思わずにはいられませんchar。これらすべての「1」、「2」などのリテラルは、対応する数字ではなく、それらの文字コードを表します。それがあなたの意図だったとは思えません。

于 2012-11-25T10:05:20.723 に答える
0

char litera [63]-> char litera [64] int liczba [63]-> int liczba [64]

配列サイズの初期化の代わりに64を作成します。配列のサイズを初期化するときに、さらに1つのインデックスを初期化します。

于 2020-05-10T18:12:53.493 に答える
0

インデックス付けは常にi=0で始まりますが、要素数-カウントは1で始まります。

于 2020-10-02T00:48:42.397 に答える