如何在不知道有多少个数字的情况下,往数组里输入数字?
请问你是用什么语言的?
如果是用java或者c# ,,那么使用List,或者Array类,都可以在不知道有多少数字的情况下push进去。
如果是C/C++,那么由于c/c++中 不允许定义动态数组 (C++中可以使用STL里的List),也就是数组初始化必须标明长度。这个时候就需要自己来实现一个可动态分配的数组。我用指针和结构体写了一个样例,其中 t指向的就是数组的首个地址,这样可以遍历,删除,增加数字。
struct node { int value; node * next; }; int main() { int b; node *last = new node; last->next = new node; node *start = last; //输入一串数字以-1为结束标志 while(true) { node *current = new node; current->next = new node; scanf("%d",&b); if(b==-1) break; current->value = b; last->next= current; last = current; } //t 指向数组首个地址 node *t=start->next; //输出数字 while(t->next!=NULL) { printf("%d",t->value); t=t->next; } }
--------------------------更新----------------------------
想来想去,C语言可以用使用链表的方式来实现,其实还可以使用c语言提供的内存管理函数来实现。
动态的扩展数组的内存。但是一开始申请使用内存的时候还是给一个初始的值哦。例如下面的程序,初始数组长度为2个字节,当要溢出的时候自动增加2个字节的长度。直到数字输入结束。初始内存长度和自动增加长度都是动态的,c语言代码:
#include <stdio.h> #include <string.h> #include <stdlib.h> int main() { int *arr; int x;int i=0;int len = 2;int add =2; arr = (int*)malloc(len); //输入一串数字,以-1为结束标志 while(true) { scanf("%d",&x); if(x==-1) break; arr[i]=x; i++; if(i>=len) { arr = (int *)realloc(arr,len+2); } } for(int j =0;j<i;j++) { printf("%d ",arr[j]); } return 0; }
-----------------------更新--------------------
如果你是做ACM的刷题的同学,那么上面的方法请忽略,稍作知识了解就可以。所有的题目都会给你数据范围的,你定义数组的时候,长度大于数据范围就可以了。
————————————更新————————-
我大概揣测到你的意图 。输入数据是一串数字。但是不告诉你有多少个。也不告诉你结束标志是什么。
这个时候你可以使用getchar()函数,使用字符接受键盘输入的数字。输入回车的时候getchar会自动结束。你也可以
直接用char数组一次性接受输入的字符串。再对字符串进行拆分成数字存到数组里。
这不是个链表吗?
@Bluto: 链表其实就是动态的数组
List().ToArray()
ka考点是数组的长度是不可变的?
兄得,问问题可不能这样问哦,别人不好回答的。数组长度是不可变的,你在不知道有多少填充内容的情况下是不能用数组的,你可以用集合,集合可以随时添加内容进去。可以先去了解一下集合,解决不了可以再问问
不明白你的问题。你是想建动态数组吗?
用list集合,或者像datatable这个数据类型,可以动态add数据的数据类型都可以
Java下的List->Arraylist可以实现你要求的数组功能
你用的哪种语言,请描述的具体一点!
– Mad_Rabbit 6年前