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

这里有两个错误:首先,您试图声明arrays[63]存储 64 个元素,因为您可能将数组 ( n) 的大小与可能的最大索引值 (即n - 1) 混淆了。所以它肯定应该是litera[64]and liczba[64]。顺便说一句,您也必须更改此行 - while (i<=64):否则您最终会尝试访问第 65 个元素。

其次,您尝试使用 scanfchar的格式说明符填充值%s,而您应该在%c此处使用。

此外,不禁想知道为什么将liczba数组声明为存储ints 的数组,并使用 s 数组对其进行初始化char。所有这些“1”、“2”等......文字代表的不是相应的数字 - 而是它们的字符码。我怀疑那是你的意图。

于 2012-11-25T10:05:20.723 回答
0

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

make 64 代替数组大小初始化。初始化数组大小时再初始化 1 个索引。

于 2020-05-10T18:12:53.493 回答
0

索引总是从 i = 0 开始,但元素的数量从 1 开始。

于 2020-10-02T00:48:42.397 回答