Чтение плавает в массив - PullRequest
1 голос
/ 09 мая 2009

Как я мог прочитать, скажем, 10 чисел с плавающей запятой и сохранить их в массиве без потери памяти?

Ответы [ 6 ]

2 голосов
/ 09 мая 2009

Aha. Проблема не в чтении поплавков, а в памяти. Вы читаете в i , и вам нужен массив, который содержит ровно i с плавающей точкой.

Это действительно пахнет домашней работой, что хорошо, но я слишком учитель, чтобы дать вам полный ответ. Поэтому я скажу вам, что вам нужна функция C с именем malloc () и оператор C (она выглядит как функция, но на самом деле встроена в язык) с именем sizeof .

Посмотрите этот урок .


Да, у тебя это есть. Вот код из вашего комментария, отформатированный.

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. Более логично использовать malloc для всего, кроме символов
  2. В Си массивы и указатели имеют очень тесную связь; на самом деле *(pValues+index) точно соответствует pValues[index].

Так что я бы переписал это как:

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, потому что & является оператором адреса, а temp является float. И, вы просто делаете арифметику указателей со своим индексом. Таким образом, мы могли бы переписать это еще раз как:

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 голосов
/ 09 мая 2009
int size = 10;
float vet[size];
   for(i = 0; i < size; i++){
      scanf("%f", &vet[i]);
   }

Так просто, как могло бы быть:)

0 голосов
/ 24 мая 2009

звучит как домашнее задание.

читать число с плавающей точкой от входа. умножьте это на размер отдельного поплавка выделить точное количество байтов, хранящих адрес в указателе на числа с плавающей запятой иметь цикл чтения в плавающих от входа есть цикл, который складывает все числа с плавающей точкой в ​​массиве

Я предполагаю, что урок домашней работы состоит в том, чтобы понять связь между термином указатель и массив, хотя вы можете сделать это без какой-либо индексации массива, но ваш вопрос подразумевает, что вы должны использовать массив.

0 голосов
/ 09 мая 2009
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]);
}
0 голосов
/ 09 мая 2009

Ответ на ваш вопрос заключается в том, что вы не можете добавлять объекты в массив и ожидать, что массив будет использовать какую-либо память.

0 голосов
/ 09 мая 2009

Вы должны быть более конкретными о проблеме.

Если у вас нет чего-то еще, что вам нужно сделать с этими числами, то самый простой способ сэкономить память - это не сохранять их в массиве для начала.

Звучит так, будто ты хочешь что-то вроде.

сумма = 0;
делать
читать текущий
сумма + = текущая
while (вы еще не прочитали 10 цифр);

...