C语言中,对于不知道长度的数组怎样输入。。。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中,对于不知道长度的数组怎样输入。。。相关的知识,希望对你有一定的参考价值。

就是让你输入学生的学号,但你不知道用户会输入几个。。。

1、一维数组的定义、引用和初始化:定义一维数组的一般形式:类型名 数组名[常量表达式]。

2、一维数组程序举例:冒泡法。

3、得到结果进行输出。

4、二维数组常称为矩阵。把二维数组写成行列的排列形式,可以形象的理解二维数组的逻辑结构。

5、字符数组的定义,引用和初始化:C语言中没有字符串类型,字符串是存放在字符型数组中的。

6、字符数组综合举例。输出一个菱形。

参考技术A 一般情况下,编程前先要进行需求分析,确定学号的最大长度,在输入中加入控制,如:
char stu_num[21] ; //确定最大长度为20个有效字符
getline( stu_num , 20 ); //这样可以确保输入不越界。

对于不确定多少个数据的输入,采用以下办法处理:
while( 1 )

char stu_num[21] ; //确定最大长度为20个有效字符
printf("请输入学号,最长20位,直接回车结束输入:");
getline( stu_num , 20 ); //这样可以确保输入不越界。
if ( !stu_num[0] ) //如果输入空值,则退出
break ;
....以下进行其它输入
本回答被提问者采纳
参考技术B 不明白,你说输入什么?
从文件读入?不知道文件里面数据有多少?这种情况就用楼上的方法,链表,不过数组嘛,就动态申请空间,malloc一下啦。文件的结束是EOF什么的。可以用FSCANF,FGETS多种方法。
如果是已经有个数组存好数值,但是不知道长度,要输入给函数的话,这个比较麻烦了。
如果是字符数组,你倒是可以判断'\0',数字数组就要看你的数据定义了……

学号……手工输入的肯定多不到哪儿去啊,除非是B/S程序,全世界的用户一起在使用。但那已经不是C语言的管理范围了。学号长大概20位吧,当然都是数字或字母,就用char [],那你开个10万的字符数组,就肯定够大了。
char studentid[100024][20];
参考技术C 你是说不知道会输入多长还是输入多个学号, 不知道输入多长就定义一个足够长的, 之前写的一个, 可以参考一下, 输入任意长度
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()

char *storage;
int ch;
int str_len = 0;
storage = (char *)calloc(1, 64); /*分配内存*/
while ((ch = fgetc(stdin)) != '\n')
if ((str_len = strlen(storage)) == (sizeof(storage) - 1))
/*增加内存*/
realloc(storage, sizeof(storage) + 64);

printf("%d\n", str_len);
memcpy(storage + str_len, &ch, 1); /*内存拷贝*/

printf("storage: %s\nlen = %d\n", storage, strlen(storage));
return 0;
参考技术D C语言是没有原生的对动态数组的支持的,而且C语言不支持面向对象,根据你这个案例不推荐你自己实现动态数组。

你可以在接受输入时检查当前插入位置有没有越界,一旦数组中的元素数量超过某一特定的阈值就输出到文件中,然后把数组清空,重新使用。

c语言中如何自定义数组长度

我想让用户自己来输入需要多少个数,怎样定义数组,来达到这样的效果?
因为数组长度不能用未知数,所以不知道该怎么实现。
请达人帮忙~~ 谢谢!

动态分配的数组可以自定义数组的长度,示例如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()

printf("输入要分配的内存大小:");
int size;
scanf("%d", &size);  //输入自定义的数组长度
int *pstart = (int *)malloc(sizeof(int) *size);
if (pstart==0) 
printf("不能分配内存\\n");
return 0;

memset(pstart, 0x00, sizeof(int) * size);
int inx;
for (inx=0; inx!=size; ++inx) pstart[inx] = inx;
for (inx=0; inx!=size; ++inx) printf("%d\\t", pstart[inx]);
printf("\\n");
return 0;

参考技术A C99标准支持不定长数组(代价是不能用goto语句)。在输入语句后声明就可以了。
不过现在的编译器对C99的支持都不好```
对于ANSI C(C89)一般的编译器都支持。不过数组长度必须是编译期确定的常量,运行时不能改变。所以采用动态分配实现。
例如
#include<stdio.h>
#include<stdlib.h>/*这个头文件在用malloc和free等分配内存函数时必须被包含*/
int main()

int n,*a=NULL;
printf("Please input the num of elements:\n");
scanf("%d",&n);
if(!(a=(int *)malloc(n*sizeof(int)))

printf("Memory is not accessed!\n");
exit(1);/*内存分配失败时异常退出。也需要stdlib.h*/

/*如下使用方法实质是相同的*/
scanf("%d",a[0]);
scanf("%d",a+0);
/*这里写代码*/
free(a);
/*用完之后需要释放,否则会造成内存泄漏*/

return 0;

其它还有calloc、realloc等,C++里也可以用new、delete等运算符(如 confuciuskg 所述),具体用法可以直接百度。

参考资料:原创+引用

参考技术B 采用动态分配即可实现,例如:

#include<iostream>
using namespace std;
void main()

int* pArray = NULL; //动态数组
int N; // 动态确定的数组个数
cout << "Please input the number of element in the Array: ";
cin >> N; // 从屏幕中输入数组元素个数
pArray = new int[N]; // 根据N的大小动态分配内存
int i;
for(i = 0; i < N; i++)cin >> pArray[i]; // 从屏幕中依次输入数组元素
cout << "The elements of the Array you inputed is:\n "; // 依次输出这个数组
for(i = 0; i < N; i++)cout << pArray[i] << endl;
delete pArray; // 释放动态分配的内存
参考技术C 数组不能在方括号中用变量来表示元素的个数, 但是可以是符号常数或常量表达式。
例如:
#define FD 5
main()

int a[3+2],b[7+FD];
……

是合法的。
但是下述说明方式是错误的。
main()

int n=5;
int a[n];
……


但是,数组可以超界使用。本回答被提问者采纳
参考技术D int *p=NULL,n;
printf("Please input the num of elements:\n");
scanf("%d",&n);
p=(int *)malloc(n*sizeof(int));
if(!p)
printf("Memory is not accessed!\n")
else

/*
这里你就可以自由使用了,这个我是屡试不爽啊!哈哈 */

以上是关于C语言中,对于不知道长度的数组怎样输入。。。的主要内容,如果未能解决你的问题,请参考以下文章

怎样在c语言中输入不少于10个数字的数组,急求

c语言中如何自定义数组长度

C语言 数组中字符串的长度的怎么计算的·~就是输入一个字符串怎么能快速的知道他的长度··

在c语言中,怎样在一个数组中插入一数

C语言数组怎样求和,

c语言中如何输入一个没有长度的数组