C语言怎么输入不确定个数的double型数据?

以下是部分编码:

#include<stdlib.h>
#include<stdio.h>
#include<math.h>
#define N 10
void main()
{
int i,k=0;
double u,pnum[N],upnum[N],downum[N];//这里的N我想由输入的数据个数决定应该怎么写?
printf("enter 10 :\n");
for(i=0;i<N;i++)
scanf("%f",&upnum[i]);
printf(":\n");

你可以这样,判断下一个是不是换行,如果是结束输入...例如:

#include <stdio.h>
int main()
{
 double upnum[1000];
 int i, n = 0;
 while (scanf("%lf", &upnum[n++]) != EOF)
 {
  if (getchar() == '\n')
  {
   for (i = 0; i < n; i++)
    printf("%.2lf ", upnum[i]);
   printf(", 共%d个数.\n", n);
   n = 0;
  }
 }
 return 0;
}

运行效果:

追问

谢谢你

追答

8k7

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-11-11
用mallco函数,如下
int N = 0;
double *pnum;
scanf("%f",&N);
pnum=(double *)malloc(10*sizeof(double));
printf("enter %d :\n",N);
for(i=0;i<N;i++)
scanf("%f",&pnum[i]);
printf(":\n");追问

这里要对upnum[N],downum[N]输入的数据进行运算然后赋值给pnum[N],
如pnum[i]=(upnum[i]-downum[i])/downum[i],
请问这个要怎么写?

追答

我上面写错了,应该是
pnum=(double *)malloc(N*sizeof(double));
upnum和downum的赋值也是一样的
double *pnum,*upnum,*downum;
pnum=(double *)malloc(N*sizeof(double));
upnum=(double *)malloc(N*sizeof(double));
downum=(double *)malloc(N*sizeof(double));
然后
pnum[i]=(upnum[i]-downum[i])/downum[i];运算就好了

追问

新手问题较多请见谅,到时加分哈。

你看看是这样么:

追答

我不太明白你的意思。
N值也是要输入的,不然你的N就是0
scanf("%f",&N);
然后每个数据用循环一个一个输入,这样
for(i=0;i<N;i++)
scanf("%f",&pnum[i]);

本回答被提问者采纳
第2个回答  2014-11-11
我来解答你的疑问吧,看着分数蛮可观的。楼下只是解释了如何定义不确定的输入个数,但程序设计里引用malloc是需要free函数的。否则程序就会出现内存泄露了。
程序设计如下:
#include "stdio.h"
#include "stdlib.h"
int main()
{
int i,k=0;
int N = 0;
printf("请输入N是多少:\n");
scanf("%d",&N);
double *upnum,*downum,*pnum,u;
upnum = (double *)malloc(N*sizeof(double));
downum = (double *)malloc(N*sizeof(double));
pnum = (double *)malloc(N*sizeof(double));
printf("请输入10个以上的实测断沙数据\n");
for(int i=0;i<N;i++)
scanf("%lf",upnum+i);
printf("请输入相同个数的线上断沙数据\n");
for(int i=0;i<N;i++)
scanf("%lf",downum+i);
for (int i=0;i<N;i++)
{
pnum[i] = (upnum[i]-downum[i])/downum[i];
}

free(upnum);
free(downum);
free(pnum);
return 0;
}追问

谢谢,不过高手你慢了一步啊

第3个回答  2014-11-11
浮子通常用于通常的十进制数,但双由于有效和高效地索引位数的范围内广泛地比它通常用来表示更精确的小数或相对大的数目(不能由长表示),如:1.121324328947893275973249,
百亿千亿等。
第4个回答  2014-11-11
scanf("%lf",&upnum[i]);追问

不行啊 这样写后出现很多问题

相似回答