黑马程序员技术交流社区

标题: 又是求助帖 接上一个帖子 这是我自己写的代码 [打印本页]

作者: 李国峰    时间: 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

附个图片,文字注释感觉写的不太容易明白

作者: 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
  1. #include <stdio.h>

  2. int main(int argc, const char * argv[]) {
  3.    
  4.     //定义两个变量.作为二维数组的行下表  列下标
  5.     int num,num1;
  6.    
  7.     //提醒用户输入  两个数(行下标   列下标)
  8.     printf("请输入两个构成数组的行下标,列下标:并用逗号隔开\n");
  9.    
  10.     //接收用户输入(行下标   列下表)
  11.     scanf("%d,%d",&num,&num1 );
  12.    
  13.     //定义一个数组
  14.     int arr[num][num1];
  15.    
  16.     //遍历数组(接收构成的 数组)  通过for  循环
  17.     for (int i=0; i<num; i++) {
  18.         for (int j=0; j<num1; j++) {
  19.             printf("请输入数组元素\n");
  20.             scanf("%d,%d",&arr[i][j]);
  21. //这里错的,你两个%d赋给二维数组一个值?
  22.         }
  23.     }
  24.     // 打印数组
  25.     for (int i=0; i<num; i++) {
  26.         for (int j=0; j<num1; j++) {
  27.             printf("arr[%d][%d]=%d",num,num1,arr[i][j]);
  28.             
  29.         }
  30.     }
  31.    
  32.    
  33.     return 0;
  34. }
复制代码

作者: 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