c语言,如何将键盘输入的n个整数存入一个数组中,n的大小未知

如题所述

1、可以预先定义足够大的数组(浪费在所难免),然后将键盘输入的整数存入数组,并累计数据个数。
...................................................................
int i,n = 0,a[1024]
while(1) {
printf("输入整数(q: 结束输入过程)%d : ", n + 1);
if(scanf("",&a[n]) != 1) break;
++n;
}
for(i = 0; i < n; ++i) printf("%d ",a[i]);
printf("\n");
.............................................................
2、动态申请空间
.................................................................
#include <stdlib.h>
int i,n,*a;
printf("数据个数 : ");
scanf("%d",&n);
a = (int *)malloc(n * sizeof(int));
for(ii = 0; i < n; ++i) {
printf("数%d = ",i + 1);
scanf("%d",&a[i]);
}
for(i = 0; i < n; ++i) printf("%d ",a[i]);
printf("\n");
.........................................................
delete a; // 程序结束前要释放动态内存
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-10-14
这样来实现
#include<stdio.h>
void main()
{
int a[50];
int i=0,j=0;
printf("请输入数据,中间用空格间隔,用回车结束输入:\n");
do
{
scanf("%d",&a[i++]);
}while(getchar()!='\n');
for(j=0;j<i;)
{
printf("%3d",a[j]);
j++;
if(j%5==0)
printf("\n");
}
printf("\n");
}本回答被提问者和网友采纳
第2个回答  2012-05-13
你要把n个整数依次存入数组,有多种方法,如果一个一个输入,循环的终止条件必定要设立一个标志位的,就像你输入一个字符串要有\0结尾一样,一个程序的确定性是程序运行的前提,计算机只能认识你输入的东西,你要告诉它你结束了,就要让它从你的输入中找到记号。追问

请问大神,除了一个一个输入,还有什么办法?

追答

额。我不是大神,就是个菜鸟。。。
昨天写得有点快了写错了,呵呵,我意思是输入到内存中是有多种方法,比如可以弄到链表里面等等,引起歧义不好意思。
我是不知道你的本意是什么,如果想在程序中随时随地写入一个值,但是不想重复写什么scanf等语句,可以把输入一个数作为一个单独的功能,写一个void InputANum(int *Source, unsigned int Position, int input); 如果你要输入一个数到数组里面就调用一下这个函数,在程序的各个地方都可以方便的把数据放到数组里面,这个也是模仿一下链表的新建节点的操作。
希望可以帮助到你

第3个回答  2012-05-13
#include <stdio.h>
#define MAXN 1000
int main ()
{
int num[MAXN];
int id = 0;
while (scanf("%d",&num[id])!=EOF)
{
id ++ ;
}
int i;
for(i=0;i<id;i++)
{
printf("%d ",num[i]);
}
printf("\n");
return 0;
}
可以采用文件结束为结束位置,输入ctrl+z,回车结束输入n个数追问

不行的,你把它放在编译器里试试吧,编译都通不过,将i的声明移到开头,编译倒是通过了,但运行无结果,就是那!=EOF有问题,这在getchar中才可以这样用

第4个回答  2012-05-13
int a[100];//看你的需要来确定数组大小
int i,n;(n要是确定的数就不要定义不要输入 直接用)
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);追问

你这个n未知的话,那个for就是死循环了啊,我试了,它会一直让我输入。。。

追答

当你知道n是什么的时候,先输入n啊
不确定n的组 有数字个数定的话
int i=0,k;
while(scanf("%d",&k)!=EOF){
a[i]=k;
i++;
}
输入结束时按ctrl+z就行了

追问

我运行试了一下,不行诶,应该是scanf("%d",&k)!=EOF的问题,一般都是(c=getchar())!=EOF,scanf的话,应该是没有字符就停吧,读不到EOF

追答

#include
int main(){
static int i=0,a[20];
int k;
while(scanf("%d",&k)!=EOF)
{
a[i]=k;
i++;
}
for(k=0;k<i;k++)
printf("%d ",a[k]);
return 0;
}
测试数据 1 2 3 4
crtl+z
输出 1 2 3 4
你试试 记得输完数据先回车 再crlt+z