C语言中如何给一个数组输入一组总数未知的数

C语言 数组未知个数 怎么声明~

C语言在数组个数未知的情况下,根据应用情况不同,有三种方式。
1,数组元素总数未知,但是需要存储的内容是已知的。
其实这是一种变相的已知个数,只是编程者不去计算总个数,把这个工作交给系统来做。这时可以通过数组个数留空,显式初始化数组进行声明。
比如
char s[] = "this is a test string";
就是初始化了这样一个数组s,其空间个数隐式的由初始化字符串决定。

2,数组元素总数未知,但最大规模已知。
比如不知道数组的总个数,但是确定不会超过100个,那么就可以定义一个100个元素的数组,供存储调用。

3,动态分配数组。
通过malloc函数,可以动态的分配数组,然后记录下当前分配的数组元素个数,并使用该数组。当数组空间不足时,可以通过realloc函数,重新分配空间,扩大数组元素个数。
比如
int size = 100;
int *p = (int *)malloc(sizeof(int) * 100); // 初始化分配100个元素空间。用size保存当前数组规模。
p = realloc(sizeof(int)*(size + 100), p);//当空间不足时,增加100个元素。
size+=100;//需要注意的是,必须同步维护size的大小,否则会出错。

每次循环, 你的 getchar() 要读去一个字符。如果这个字符 不是 '
', 你需要把它 “还” 回来,
否则 scanf( ..) 时 少了 一个 字符,若少的是空白符,则没有影响,若少了数字,就有影响。
通常,可以用:
int c;
while(1){
c = getc (stdin); // 读一个字符
if (c == '
') break; // 如果是新行符,循环结束
else ungetc (c, stdin); //否则,放回去
scanf ( .....
}

#include<stdio.h>

#include<ctype.h>

int main()

{

int a[1000];

char c;

int i=0;

int n=0;

while((c=getchar())!='
')

{

if(isdigit(c))

{

ungetc(c,stdin);//将c送回输入流

scanf("%d",&a[n++]);

}

}

for(i=0;i<n;i++)

{

printf("%d",a<i>);

}

return 0;

}

扩展资料:

printf()函数的用法

1.printf()函数的调用格式为:printf("<格式化字符串>",<参量表>);

//__stdcall

int __cdecl printf(const char*p,...);

...可变参数

printf在打印浮点数,不论原来是双精度还是单精度,都变为双精度(8字节)

打印1字节(char)2字节(short)4字节(int)==>4字节,除了long long(8字节)

void main()

{

int a=10;

folat ft=12.25f;

printf("%d%d
",a,ft);

}

%d格式控制符--不具有强转能力

A格式化字符串包括两部分内容:

一部分是正常字符,这些字符将按原样输出;

另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。

1.d/i有符号十进制形式输出(正数不输出符号)

2.u无符号十进制形式输出

3.o无符号八进制形式输出(不输出前缀0)

4.x无符号十六进制形式输出(不输出前缀Ox),并以小写abcdef表示。

5.X无符号十六进制形式输出(不输出前缀Ox),并以大写ABCDEF表示。

6.c输出单个字符

7.s输出字符串

8.f以小数形式输出单、双精度实数

9.E/e用科学计数法表示浮点数

10.G/g以%f或%e中较短的输出宽度输出单、双精度实数

+++++++++

void main()

{

long long x=0x12345678901357;

printf("%x
",x);//=>78 90 13 57

printf("%lx
",x);//=>78 90 13 57

printf("%llx
",x);//=>12345678901357

}

B参量表

需要输出的一系列参数,其个数必须与格式化字符串所说明的输出参数个数一样多,各参数之间用","分开,且顺序一一对应

例题:

void main()

{

char a=128;

printf("%d
",a);//=>-128

printf("%x
",a);//=>ffff ff80

}

当printf调用,a给可变参数,自然而然扩展为4字节,a是有符号数,扩展的时候加符号位

1111 1111 1111 1111 1111 1000 0000=>ffff ff80

unsigned char a=128;

printf("%x
",a);==>80



首先要先定义一个足够大的数组,然后利用scanf的返回值来确定输入结束。

scanf的返回值是实际输入数值的个数。

比如输入整型数值时,scanf("%d",&a);如果输入a成功,那么返回值会是1。

按照这个思路,可以编写输入整型数组的代码如下:

#include <stdio.h>
#define MAX_INPUT 100 //假定最大可以输入100个数
int input(int *a)//a为要输入的数组,返回值为实际输入个数。
{
    int i;
    
    for(i = 0; i < MAX_INPUT; i ++)
        if(scanf("%d",&a[i])!=1) break;//输入并判断
    return i;//返回输入总数
}

int main()
{
    int a[MAX_INPUT];
    int n,i;
    
    n = input(a);
    printf("共计输入%d个数值
", n);
    for(i = 0; i < n; i ++)//输出之前输入的数值以验证。
        printf("%d
", a[i]);
        
    return 0;
}

除此之外,还有一种比较常见的应用是约定了数据规模,然后约定某一个不在其规模内的数值,作为输入结束标志。

比如输入若干个整型的分数值,作为分数值一定是非负整数,所以可以约定当输入-1时结束。

这类代码可以编写为:

#include <stdio.h>
#define MAX_INPUT 100 //假定最大可以输入100个数
int input(int *a)//a为要输入的数组,返回值为实际输入个数。
{
    int i;
    
    for(i = 0; i < MAX_INPUT; i ++)
    {
        scanf("%d",&a[i]);
        if(a[i] == -1) break;//当检测到输入结束标志时结束输入。
    }
    return i;//返回输入总数
}

int main()
{
    int a[MAX_INPUT];
    int n,i;
    
    n = input(a);
    printf("共计输入%d个数值
", n);
    for(i = 0; i < n; i ++)//输出之前输入的数值以验证。
        printf("%d
", a[i]);
        
    return 0;
}


有两种方法
1:定义一个比较大的数组,比如 int a[10000];
2:在使用的时候,new一个数组出来

如何在C语言中输入一维数组?
答:要先给输入的每一个数字给予它的地址,便于访问,最后拿得到的数计算出平均值输出,程序就编写完成了:3、代码全部编写成功之后编译运行,在弹出的输入面板中输入任意5个整数,按回车键,即可得出平均值,以上就是用C语言输入一个数组,关键点是数组的获取要用指针:

c语言定义一个用于输入整数数组元素的函数?
答:要定义一个用于输入整数数组元素的函数,您可以使用以下C语言代码:在上述代码中,我们定义了一个名为input_array的函数,该函数接受两个参数:一个整数数组arr和一个整数n,表示数组的长度。函数使用for循环迭代数组中的每个元素,并使用scanf函数从用户输入中读取一个整数,并将其存储到当前元素中。在...

c语言中如何输入数组中的数
答:include<stdio.h> int main(){ int i,j;float students[10];float sum=0,max=0;for(i=0;i<10;i++){ printf("请输入的学生的成绩:");scanf("%f",&students[i]);if(students[i]>max)max=students[i];sum=sum+students[i];} printf("这几个同学的最高分为:%f\n平均成绩为:%...

用c语言编!向一维数组中第 i 个元素前插入一新的元素。
答:int a[100];//定义数组 ...假设对数组赋值,不知道你有没有这步骤 int j;for(j=99;j>i;j--){ a[j]=a[j-1];} a[i]=c;//c为要插入的元素 插入元素后,原来数组元素一次后移,最后一个丢弃

C语言中,定义了一个一维数组,怎么样能直接输入一串数字,把他放到数组...
答:有两种方式,一种是scanf("%s", name);那么即是你的数组名,该函数获取字符串时遇到空格或者回车停止获取,还有一种是gets(name);该函数遇到回车停止获取,即能获得空格。

c语言已有一个已经排好序的数组现输入一个数,要求按原来的规律将它插入...
答:你的插入排好序的数组的C语言程序,我帮你改完了(改动的地方见注释).include<stdio.h> int main(){ int a[7]={12,23,34,45,56,67};int i,j,x;printf("请输入一个数:\n");scanf("%d",&x);for(i=0;i<6;i++){ if(a[i]>x){ for(j=5;j>=i;j--){//这里修改for循环...

定义一个数组a[5],给数组录入数据scanf,录入后找到数组中最大的值...
答:下面是C语言的代码示例:include <stdio.h> int main() { int a[5], i, max;// 读入数据 printf("请输入5个整数:\n");for (i = 0; i < 5; i++) { scanf("%d", &a[i]);} // 找到最大值 max = a[0];for (i = 1; i < 5; i++) { if (a[i] > max) { ...

C语言键盘上输入一个数组
答:您好,可参照下面代码,望采纳!!!include<stdion.h> void main() { int arr[10];int i;//直接逆序输入for (i = 9; i >= 0; i--){scanf("%d", &arr[i]);}for (i = 0; i < 10; i++){printf("%d ", a[i]);}printf("\n");} ...

C语言数组输入。。
答:C语言数组输入是相同类型的、数量有限的若干个变量通过有序的方法组织起来的一种便于使用的形式。数组属于一种构造类型,其中的变量被称为数组的元素。数组元素的类型可以是基本数据类型,也可以是特殊类型和构造类型。在引用数组中的元素时,采用数组名[下标]的方式,将其中的每一个元素视为一个普通的...

c语言 怎样输入一个数组单独输出数组里面的一个数
答:假设a=456,只要让a=a%10;就可以输出6了;如果要输出5,a=a/10;在a=a%10就得到了5;如果要输出4,则a=a/10;再a=a/10;再a=a%10就得到了4

IT评价网,数码产品家用电器电子设备等点评来自于网友使用感受交流,不对其内容作任何保证

联系反馈
Copyright© IT评价网