啊哈。问题不是读取浮点数,而是内存。您在 i 中阅读,并且需要一个恰好包含 i 浮点数的数组。
这确实闻起来像家庭作业,这很好,但我太老师了,无法给你完整的答案。所以我告诉你,你需要的是一个名为 malloc() 的 C 函数和一个名为 sizeof 的 C 运算符(它看起来像一个函数,但它实际上是语言中内置的) em>。
看看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;
}
我会做两个改变:
- 将
malloc 用于除字符之外的任何内容都更符合习惯
- 在C语言中,数组和指针有着非常密切的关系;事实上
*(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++);
}