二维矩阵的问题
本帖最后由 hswangrui 于 2017-1-2 12:27 编辑我想写一个自定义矩阵大小.并把所有元素赋值为6,然后输出...但结果却是一些乱码查了好几遍没发现自己哪里写错了 ...不知道哪里出了问题。求解!!
#include <stdio.h>
int main()
{
int a,b,i,j;
printf("请输入矩阵大小a*b ");
scanf("%d %d",&a,&b);
int s={6};
for(i=0;i<a;i++)
{
for(j=0;j<b;j++)
{
printf("%8d",s);
}
printf("\n");
}
return 0;
} 不能这样初始化
int s = {6};
#include <stdio.h>
int main(void)
{
int a, b, i, j;
printf("请输入矩阵大小a*b:");
scanf("%d %d", &a, &b);
int s;
for(i = 0; i < a; i++)
{
for(j = 0; j < b; j++)
{
s = 6;
}
}
for(i = 0; i < a; i++)
{
for(j = 0; j < b; j++)
{
printf("%8d", s);
}
printf("\n");
}
return 0;
} 人造人 发表于 2017-1-2 14:09
不能这样初始化
谢谢啊 为什么呢 不是说数组用大括号{}里面写个数字 表示给所有元素赋值么
看了你写的 就是用内嵌for循环依次赋值 然后再用一个内嵌for循环表示矩阵为什么不可以把定义矩阵里的元素直接全部赋值? 本帖最后由 人造人 于 2017-1-2 14:54 编辑
只有数组元素个数确定时才能用大括号{}
以下会报错
int i= 9;
int s = {6};
这样就可以
int s = {6};
不过也不是所有元素都初始化
#include <stdio.h>
int main(void)
{
int i, j;
int s = {6};
for(i = 0; i < 8; i++)
{
for(j = 0; j < 9; j++)
{
printf("%8d", s);
}
printf("\n");
}
return 0;
}
输出
6 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 人造人 发表于 2017-1-2 14:53
只有数组元素个数确定时才能用大括号{}
以下会报错
你刚刚举得例子似乎说明一维数组可以 但二位数组就行不通了...小甲鱼视频演示的是初始化为0,事实上也就是初始化了第一个元素而不是把所有元素初始化......那么如果要把二维数组全部初始化就必须用嵌套for循环实现么{:5_94:} 本帖最后由 zealstar 于 2017-1-2 15:20 编辑
hswangrui 发表于 2017-1-2 15:05
你刚刚举得例子似乎说明一维数组可以 但二位数组就行不通了...小甲鱼视频演示的是初始化为0,事实上也就 ...
不是这个问题,使用VLA,也就是C99标准的动态数组,就是不能初始化!
比如:
scanf("%d", a);
int p = {0};
这也不能编译的。
只有这样:
scanf("%d", a);
int p;
for(i = 0; i < a; i++)
{
p = 0;
}
这才能初始化…… hswangrui 发表于 2017-1-2 15:05
你刚刚举得例子似乎说明一维数组可以 但二位数组就行不通了...小甲鱼视频演示的是初始化为0,事实上也就 ...
你完全可以自己尝试吗
int i = 8, j = 9;
int s2 = {6};
int s3 = {6};
//不管是一维还是二维,只要这样初始化,就报错
不初始化就,不报错
int i = 8, j = 9;
int s2;
int s3; hswangrui 发表于 2017-1-2 15:05
你刚刚举得例子似乎说明一维数组可以 但二位数组就行不通了...小甲鱼视频演示的是初始化为0,事实上也就 ...
int s0;
int s1;
int s2 = {6};
int s3 = {6};
//这样就可以 hswangrui 发表于 2017-1-2 15:05
你刚刚举得例子似乎说明一维数组可以 但二位数组就行不通了...小甲鱼视频演示的是初始化为0,事实上也就 ...
"那么如果要把二维数组全部初始化就必须用嵌套for循环实现么"
也许是吧,我不知道还有其他方法 人造人 发表于 2017-1-2 15:27
"那么如果要把二维数组全部初始化就必须用嵌套for循环实现么"
也许是吧,我不知道还有其他方法
谢了!其实直接把s =6合并到下面的printf函数之前就行了 不用分两个for循环
我查了查本来以为可以用meset函数实现后来试了半天发现messt只能初始化为特定的-1 0两个值
其余都是乱码。看来只能是用for循环来自定义了谢了啊
“其实直接把s =6合并到下面的printf函数之前就行了 不用分两个for循环”
不理解你的意思,不妨举个例子
要用memset,数组必须是char类型的
#include <stdio.h>
#include <string.h>
int main(void)
{
char s1;
memset(s1, 6, 8 * 9);
for(int i = 0; i < 8; i++)
{
for(int j = 0; j < 9; j++)
{
printf("%d ", s1);
}
printf("\n");
}
return 0;
}
本帖最后由 hswangrui 于 2017-1-2 17:03 编辑
#include <stdio.h>
#include <string.h>
int main(void)
{
int s1;
for(int i = 0; i < 8; i++)
{
for(int j = 0; j < 9; j++)
{
s1=6; //可以合并到这里
printf("%6d", s1);
}
printf("\n");
}
return 0;
}
[/code
哦 原来如此....memset可以这么用.长知识了....谢了
页:
[1]