黑马程序员技术交流社区
标题:
又是求助帖 接上一个帖子 这是我自己写的代码
[打印本页]
作者:
李国峰
时间:
2015-9-2 11:21
标题:
又是求助帖 接上一个帖子 这是我自己写的代码
接上一个帖子
定义二维数组 输入行下标 在接收各个数组的元素的值 最后在遍历出来!不知道怎么接收数组的 值 感觉代码好像也有问题 求指教 给指点指点看看那快点 问题!
感觉应该是接收 数组元素的地方出了错 现在的情况就是打印不出来!!
#include <stdio.h>
int main(int argc, const char * argv[]) {
//定义两个变量.作为二维数组的行下表 列下标
int num,num1;
//提醒用户输入 两个数(行下标 列下标)
printf("请输入两个构成数组的行下标,列下标:并用逗号隔开\n");
//接收用户输入(行下标 列下表)
scanf("%d,%d",&num,&num1 );
//定义一个数组
int arr[num][num1];
//遍历数组(接收构成的 数组) 通过for 循环
for (int i=0; i<num; i++) {
for (int j=0; j<num1; j++) {
printf("请输入数组元素\n");
scanf("%d,%d",&arr[i][j]);
}
}
// 打印数组
for (int i=0; i<num; i++) {
for (int j=0; j<num1; j++) {
printf("arr[%d][%d]=%d",num,num1,arr[i][j]);
}
}
return 0;
}
作者:
李国峰
时间:
2015-9-2 11:24
这个忘记放图片了 我弄个链接 上边有运行情况 有在x-code 里的代码 差不多 这个有稍微的修改
但是运行情况就是 有问题 方便的可以试着运行一下 帮我看看 是哪个地方的错误
作者:
郭占岭
时间:
2015-9-2 11:32
看着好屌的样子
作者:
lionheartism
时间:
2015-9-2 12:52
//定义两个变量.作为二维数组的行下表 列下标
int num, num1;
//提醒用户输入 两个数(行下标 列下标)
printf("请输入两个构成数组的行下标,列下标:并用逗号隔开\n");
//接收用户输入(行下标 列下表)
scanf("%d,%d", &num, &num1);
int **arr = (int**)malloc(num * sizeof(int *)); // 动态二维数组的定义 arr是一个指向int指针的指针 用动态分配malloc使arr指向一 //个拥有num个指向int型指针的指针的数组
//这行执行完成你可以理解为二维矩阵已经有了num行但是列还没有
for (int i = 0; i < num; i++) // 动态二维数组的定义
arr[i] = (int*)malloc(num1 * sizeof(int)); // 动态二维数组的定义 为每一行分配空间此时你就有了一个num行 num1列的二维矩阵
for (int i = 0;i < num;i++) {
printf("请输入第%d行数组元素,元素之间空格隔开:",i+1);
for (int j = 0;j < num1;j++) {
scanf("%d", &arr[i][j]);
}
fflush(stdin);//清空输入流,防止前一行的多余数据被下一行读取
}
for (int i = 0; i<num; i++) {
for (int j = 0; j<num1; j++) {
printf("arr[%d][%d]=%d ", i, j, arr[i][j]);
}
printf("\n");//这里你需要换行才能比较好看的打印出来
}
这是改了你的代码然后实现你所想打到的效果,首先像[][]这种定义方式[]中的一定要是常量,变量是不允许的。
作者:
lionheartism
时间:
2015-9-2 13:06
捕获1.PNG
(64.9 KB, 下载次数: 23)
下载附件
2015-9-2 13:04 上传
附个图片,文字注释感觉写的不太容易明白
作者:
lionheartism
时间:
2015-9-2 13:24
好吧,误导群众了,之前实在VS下调试的,没想到xcode竟然支持int a[n]这种方式,那唯一错误就是遍历里scanf里面打了两个%d= =。失误失误
作者:
a124113798
时间:
2015-9-2 14:01
22行scanf里变量没有加地址&吧,还有只有一个变量,你写2个%d干啥呢么、、、
作者:
Joker_999
时间:
2015-9-2 14:27
本帖最后由 Joker_999 于 2015-9-2 14:31 编辑
22行首先少了一个取地址符号&,其次arr[][]里应该是i,j吧!num ,num1用户输入完就是定值了吧!要不然跟循环都没关系了,还有arr[][]
表示的是一个二维数组的元素吧,干嘛用两个%d%d。同样的问题出现在了27行,27行所有的num,num1都用i,j代替吧!知道为什么打不出来么?循环根本就是个摆设,没真正达到执行效果吧/尴尬/
作者:
pyy061
时间:
2015-9-2 14:30
有两个问题:
1. printf("请输入数组元素\n");
scanf("%d,%d",&arr[i][j]);这里只接受一个数组元素的值,为什么要两个%d呢,接受的并不是i,j的值啊,i,j的值随for循环自己会变化的.
2. // 打印数组
for (int i=0; i<num; i++) {
for (int j=0; j<num1; j++) {
printf("arr[%d][%d]=%d",num,num1,arr[i][j]);}}
这里printf应该打印的是i.j的值吧,num和num1不是固定的吗?
作者:
jx836202365
时间:
2015-9-2 21:34
#include <stdio.h>
int main(int argc, const char * argv[]) {
//定义两个变量.作为二维数组的行下表 列下标
int num,num1;
//提醒用户输入 两个数(行下标 列下标)
printf("请输入两个构成数组的行下标,列下标:并用逗号隔开\n");
//接收用户输入(行下标 列下表)
scanf("%d,%d",&num,&num1 );
//定义一个数组
int arr[num][num1];
//遍历数组(接收构成的 数组) 通过for 循环
for (int i=0; i<num; i++) {
for (int j=0; j<num1; j++) {
printf("请输入数组元素\n");
scanf("%d,%d",&arr[i][j]);
//这里错的,你两个%d赋给二维数组一个值?
}
}
// 打印数组
for (int i=0; i<num; i++) {
for (int j=0; j<num1; j++) {
printf("arr[%d][%d]=%d",num,num1,arr[i][j]);
}
}
return 0;
}
复制代码
作者:
jx836202365
时间:
2015-9-2 21:39
第22行,看看就知道了
作者:
胡茂
时间:
2015-9-4 10:59
没看懂的路过,围观下
作者:
唐肖虎
时间:
2015-9-4 11:24
scanf("%d,%d",&arr[i][j]);这里多了一个%d,然后在这里printf("arr[%d][%d]=%d",num,num1,arr[i][j]);难道不是i和j么。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2