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;
}
Я бы сделал это с двумя изменениями:
- Более логично использовать
malloc
для всего, кроме символов
- В Си массивы и указатели имеют очень тесную связь; на самом деле
*(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++);
}