标题:求助:无界数组引用的问题
只看楼主
liphouse
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-5-15
结帖率:100%
已结贴  问题点数:2 回复次数:11 
求助:无界数组引用的问题
如题
/* Note:Your choice is C IDE */
#include "stdio.h"
void main()
{
  int i,sh[6];   /*如果sh[]为无界数组,即sh[]={0};*/
  printf("play input :");
  for(i=0;i<6;i++)
  {scanf("%d,",&sh[i]);}
  for(i=0;i<6;i++)
  {printf("%d,",sh[i]);}
}
程序在输出6个元素后,总输出一堆乱码和异常提示。
求原因。另求无界数组的相关知识。
初学新手,请教更便捷的提问方式。
分不多。见谅!
搜索更多相关主题的帖子: void include choice 
2013-05-15 15:29
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
得分:0 
#include "stdio.h"
void main()
{
  int i,sh[6];   /*如果sh[]为无界数组,即sh[]={0};*/    //我记得好像不能定义无界数组,因为定义数组时要涉及到内存分配,所以其大小必须确定
  printf("play input :");
  for(i=0;i<6;i++)
  {scanf("%d,",&sh[i]);}//这里scanf中要求输入格式是“整数”+“,”,六个数都要按照这种格式输入,只有这样才能正确的输出
  for(i=0;i<6;i++)
  {printf("%d,",sh[i]);}
}
2013-05-16 20:19
猫小喵
Rank: 2
来 自:计算机专业
等 级:论坛游民
帖 子:29
专家分:77
注 册:2013-5-12
得分:1 
#include "stdio.h"

 void main()
 {
   int i,sh[6];   /*如果sh[]为无界数组,即sh[]={0};*/
   printf("play input :");
   for(i=0;i<6;i++)
   scanf(" %d,",&sh[i]);
   for(i=0;i<6;i++)
   printf("%d,",sh[i]);
 }
你的程序没问题啊!我试过了,首先对于二楼所说的sh[]={0};是可以的,表示数组所有的都为0,这会防止在输出时候随机的乱码,其次在for后面的第一句话不用加大括号{}

做一个爱编程得女生
2013-05-16 20:51
Ryker
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:145
专家分:420
注 册:2013-2-19
得分:0 
...CPP里怎么没介绍这种数组

这么写有什么好处吗?

感觉这东西是旁门左道..不值得学习

实在需要临时决定数组元素个数..用 malloc ..
2013-05-16 21:11
liphouse
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2013-5-15
得分:0 
大概是我提的问题不准确.上文中的程序是能正常输出的.但如果把数组定义为无界数组,就会出现问题.
即将有注释部分的语句,改为:int i,sh[]={0};运行后就会出现乱码和异常提示.
另外对四楼做出解释.首先说下我是个新手,只是在工作中需要用到,就现上轿现扎耳朵眼.对于C语言了解不多,动态数组还不会用,指针也只有初步的印象.只感觉这样定义好像比较简单.
这个题目的要求是,求与一个自然数的相邻的两个自然数.为了完成这个练习并节省时间,所以我想一次性输入多个数据.存入数组A中,分别做+1和-1操作,得到的值不能有负数.并把所有运算得出的结果赋予新数组B并输出.而原数组A的数字是由使用者输入得到的,0是否输入是无法预定的.那么新数组B长度就会不确定.如果是与其相邻的偶数/奇数,那么也会出现这种问题.
是不是我的思路有问题?
请各位大神指点,或给个动态数组的例子借鉴下.
2013-05-16 23:26
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
得分:0 
这么个小题那用的着动态分配呀,新数组B的长度肯定小于等于原数组A的长度的2倍,将B数组长度定义为A数组长度的2倍,按照这个思路可以解出来吧!
你将B数组内所有元素初始化为-2,然后输入A数组中各元素,从而求出新数组B,通过for循环判断可以确定数组B的长度。
2013-05-17 00:09
Explorerlxz
Rank: 9Rank: 9Rank: 9
来 自:zzu
等 级:蜘蛛侠
威 望:4
帖 子:302
专家分:1032
注 册:2013-4-24
得分:0 
回复 3楼 猫小喵
这个数组中有多少元素,你确定吗?不确定怎么初始化,在内存中数组元素位置怎么分配?数组大小如何确定?数组中各元素都是连在一起的,定义无界数组是行不通的!
2013-05-17 00:13
Ryker
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:145
专家分:420
注 册:2013-2-19
得分:1 
以下是引用liphouse在2013-5-16 23:26:23的发言:

大概是我提的问题不准确.上文中的程序是能正常输出的.但如果把数组定义为无界数组,就会出现问题.
即将有注释部分的语句,改为:int i,sh[]={0};运行后就会出现乱码和异常提示.
另外对四楼做出解释.首先说下我是个新手,只是在工作中需要用到,就现上轿现扎耳朵眼.对于C语言了解不多,动态数组还不会用,指针也只有初步的印象.只感觉这样定义好像比较简单.
这个题目的要求是,求与一个自然数的相邻的两个自然数.为了完成这个练习并节省时间,所以我想一次性输入多个数据.存入数组A中,分别做+1和-1操作,得到的值不能有负数.并把所有运算得出的结果赋予新数组B并输出.而原数组A的数字是由使用者输入得到的,0是否输入是无法预定的.那么新数组B长度就会不确定.如果是与其相邻的偶数/奇数,那么也会出现这种问题.
是不是我的思路有问题?
请各位大神指点,或给个动态数组的例子借鉴下.


明白了..其实只需要一个变量和一个一维数组就行了啊

scanf一次只读一个数..

在一个循环中每次读一个数,处理完后再读下一个数继续处理

程序代码:
printf("输入数字:\n");
while(scanf("%d", &num) == 1)
{
    if(num <= 0) continue; /*得到的值不能有负数*/
    a[0] = num - 1;
    a[1] = num + 1;

    //得到结果了..输出也可以..如果保存的话..还没想好该怎么办..或者写入一个文件...

    while(getchar() != '\n')
        continue;
}
2013-05-17 09:11
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
得分:0 
我调试了没问题啊!正常

Maybe
2013-05-17 09:37
bccn新
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:57
专家分:144
注 册:2013-5-10
得分:0 
注意,C语言中是不允许定义无界数组的,写成sh[]={0};形式的,编译时会根据初始化分配内存空间,例如sh[]={0};,实际C语言在编译时只给它分配了一个内存单元,这是因为后面的初始化即{0}只有一个元素,若初始化有n个元素,则编译时给数组分配n个内存单元。之所以有这种写法只是为了初始化时输入字符串等懒得去数长度简写罢了。
2013-05-17 16:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-407160-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.061516 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved