读取浮动到数组中

时间:2009-05-09 16:21:49

标签: c floating-point floating-point-conversion

我怎么能读到让我们说10个浮点数并将它们存储在数组中而不浪费任何内存?

6 个答案:

答案 0 :(得分:2)

int size = 10;
float vet[size];
   for(i = 0; i < size; i++){
      scanf("%f", &vet[i]);
   }

尽可能简单:)

答案 1 :(得分:2)

啊哈。这不是读浮标的问题,而是记忆。你读了 i ,你需要一个完全包含 i 浮点数的数组。

这确实闻起来像家庭作业,这很好,但我太老了,无法给你完整的答案。所以我会告诉你,你需要的是一个名为 malloc()的C函数和一个名为 sizeof的C运算符(它看起来像一个函数但它实际上已经构建到语言中)

查看this tutorial


是的,你明白了。这是您评论中的代码,格式化。

int n,index;
float temp;
scanf("%d",&n);
float *pValues=(float *)calloc(n,sizeof(float));
for(index=0;index<n;index++) {
    scanf("%f",&temp); 
    *(pValues+index)=temp;
}

我会做两件事改变:

  1. 除了字符
  2. 之外,使用malloc更加惯用
  3. 在C中,数组和指针的关系非常密切;实际上*(pValues+index)完全等同于pValues[index]
  4. 所以我将其重写为:

    int n,index;
    float temp;
    scanf("%d",&n);
    float *pValues=(float *)malloc(n*sizeof(float));
    for(index=0;index<n;index++) {
        scanf("%f",&temp); 
        pValues[index]=temp;
    }
    

    让我们再看一下代码的转换。您有pValues,这是指向float的指针。您有&temp,它也是指向float的指针,因为&是地址操作符,tempfloat。 AND,你只是用索引做指针算术。所以,我们可以再重写一次:

    int n,index;    // Don't need temp
    scanf("%d",&n);
    float *pValues=(float *)malloc(n*sizeof(float));
    for(index=0;index<n;index++) {
        scanf("%f",pValues+index); 
    }
    

    现在,测验问题:如果你做了循环会发生什么

    for(index=0;index<n;index++) {
        scanf("%f",pValues++); 
    }
    

答案 2 :(得分:0)

你必须更具体地解决这个问题。

除非你需要对这些数字做其他事情,否则最简单的节省内存的方法就是不要将它们存储在一个数组中。

这听起来像是你想要的东西。

sum = 0;

读取当前
sum + =当前
虽然(你还没读过10个数字);

答案 3 :(得分:0)

您的问题的答案是您无法向数组添加内容并期望数组使用任何内存。

答案 4 :(得分:0)

float arr[10];
for(i = 0; i < 10; i++){
    scanf("%f", &arr[i]);
}

我知道,它就像上面那样,但是如果没有优化的话,不会使用额外的int。和合

使用更少的内存我们下面的代码。它们都被读入一个数组,但只有最后一个要读入的是数组:

float arr[1];
for(i = 0; i < 10; i++){
    scanf("%f", &arr[0]);
}

答案 5 :(得分:0)

听起来像是家庭作业。

从输入中读取浮点数。 乘以单个浮点数的大小 在浮点数指针中分配存储地址的确切字节数 从输入中读取浮点数的循环 有一个循环,将数组中的所有浮点数相加

我猜这里的功课是实现术语指针和数组之间的连接,虽然你可以在没有任何数组索引的情况下做到这一点,但你的问题暗示你必须使用数组。