arrays - 打印二维数组:警告:数组初始值设定项中的多余元素
问题描述
我正在尝试在输出中打印 8 行和 5 列,但我的代码抛出错误说:
warning: excess elements in array initializer.
这是我的代码:
#include <stdio.h>
void main()
{
int rows,columns;
int array[8][5] =
{
{ 11, 12, 13, 14, 15 }, { 21, 22, 23, 24, 25 },
{ 31, 32, 33, 34, 35 }, { 41, 42, 43, 44, 45 },
{ 51, 52, 53, 54, 55 }, { 61, 62, 63, 64, 65 },
{ 71, 72, 73, 74, 75 }, { 81, 82, 83, 84, 85 },
};
for(columns=0;columns<=4;columns++)
{
for(rows=0;rows<=7;rows++)
{
printf("%d",array[rows][columns]);
}
printf("\n");
}
}
谁能帮我修复这个代码片段?
解决方案
你有:
int array[5][8]= {{11,12,13,14,15},{21,22,23,24,25},{31,32,33,34,35},{41,42,43,44,45},{51,52,53,54,55},{61,62,63,64,65},{71,72,73,74,75},{81,82,83,84,85}};
这声明了一个由五个子数组组成的数组,每个子数组中有八个元素,但是您尝试使用八个子数组(每个子数组中有五个元素)对其进行初始化,这就是为什么您会收到有关“多余元素”的错误消息”。如果只有五个子数组,每个子数组有五个元素,则每个子数组中的最后三个元素将归零。
Fortran 这样做与 C 不同。请参阅 Wikipedia on Row-major vs Column-major order。
您需要使用int array[8][5] = { … };
或需要将初始化程序重新组合为五组,每组 8 个,而不是 8 组,每组 5 个。
int array[8][5] =
{
{ 11, 12, 13, 14, 15 }, { 21, 22, 23, 24, 25 },
{ 31, 32, 33, 34, 35 }, { 41, 42, 43, 44, 45 },
{ 51, 52, 53, 54, 55 }, { 61, 62, 63, 64, 65 },
{ 71, 72, 73, 74, 75 }, { 81, 82, 83, 84, 85 },
};
或者:
int array[5][8] =
{
{ 11, 12, 13, 14, 15, 21, 22, 23, },
{ 24, 25, 31, 32, 33, 34, 35, 41, },
{ 42, 43, 44, 45, 51, 52, 53, 54, },
{ 55, 61, 62, 63, 64, 65, 71, 72, },
{ 73, 74, 75, 81, 82, 83, 84, 85, },
};
我想要 8 行和 5 列。每组 5 个元素应打印在 8 个单独的行中。
所以你需要int array[8][5]
- 8 行,每行 5 个元素。在 C 中的二维数组中,第一个索引是行,第二个是列。这意味着外循环运行在行上,内循环运行在列上。
#include <stdio.h>
int main(void)
{
int array[8][5] =
{
{ 11, 12, 13, 14, 15 }, { 21, 22, 23, 24, 25 },
{ 31, 32, 33, 34, 35 }, { 41, 42, 43, 44, 45 },
{ 51, 52, 53, 54, 55 }, { 61, 62, 63, 64, 65 },
{ 71, 72, 73, 74, 75 }, { 81, 82, 83, 84, 85 },
};
for (int row = 0; row < 8; row++)
{
for (int col = 0; col < 5; col++)
printf(" %d", array[row][col]);
putchar('\n');
}
return 0;
}
输出:
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
41 42 43 44 45
51 52 53 54 55
61 62 63 64 65
71 72 73 74 75
81 82 83 84 85
推荐阅读
- javascript - 如何使用汇总来捆绑包含 es7 代码的文件?
- sql - 根据所选月份的范围,使用一条 SQL 语句插入多行
- android - Android Webview 应用程序,无法使用图像上传按钮,点击选择图像时没有任何反应
- c++ - 是 *this = Tor(); 清除对象状态是否合法有效?
- android - 如何轻松检索我的全部或部分外部 IP 地址(在 Android 设备上)?
- node.js - Req.body 为空,而我尝试了所有配置
- php - open_basedir 对父文件夹失去兴趣?
- react-native - 渐变背景不适用于屏幕
- java - 使用 Maven 和 Eclipse 创建 EAR
- qt - 如何将 QOpenGLWidget 添加到 QGraphicsScene?