我的意思是说,比如要输入一个不定长的数组(或者是字符串),提示用户输入完后以某个字符或者标志结束,这个要怎么实现啊?
用 realloc() ,下面是实现代码作参考
#include <stdio.h>
#include <malloc.h>
int main(void)
{
char *p = NULL, *p1 = NULL, c;
int count = 0, i = 0, size = 100;
if(!(p = (char *)malloc(size)))
return 0;
while('0' != (c = getchar()))
{
if(count < 100)
{
p[i] = c;
}
else
{
size += 100;
p1 = (char *)realloc(p, size);
if(!p1)
{
break;
}
else
{
p = p1;
}
p[i] = c;
count = 0;
}
count++;
i++;
}
free(p);
return 0;
}
不定长不等于无限长。比如说开一个1万大小的数组,对计算机来说微乎其微。但是绝对够用。
当然,你也可以使用string vector或者链表。
char data[10000];
int i = 0;
char ch = '\0';
while ((ch = getchar()) == '\n') //比如说\n是结束符
{
data[i++] = ch;
}
data[i] = '\0';
使用数组的话,长度超过数组分配的长度是,再进行长度扩充就好了
List<Integer> list = new ArrayList<Integer>();
System.out.println("请输入一个整数,输入over结束输入");
Scanner scanner = new Scanner(System.in);
String valueStr = scanner.next();
//判断是否是整数
Pattern pattern = Pattern.compile("-?\\d+");
while(!"over".equals(valueStr)){
if(!pattern.matcher(valueStr).matches()){
System.out.println("输入的不是整数,请重新输入");
valueStr = scanner.next();
continue;
}
list.add(Integer.parseInt(valueStr));
System.out.println("请输入一个整数,输入over结束输入");
valueStr = scanner.next();
}
System.out.print("您共输入了"+list.size()+"个整数");
System.out.println(list);
用Integer.MAX_VALUE来定义一个无限长的数组
申请一个大一点的数组,循环接收字符存入数组,并判断如果接收到某个特定的字符就跳出循环。
char a[MAX];
int i=0;
while(a[i] = getchar() != 'x')
i++;
可以在程序运行前开足够大的空间,然后程序读入后判断何时结束即可。