各位同事,我实在想不通问题出在哪里。
存在一个问题:
接受int n
; - 从控制台输入的序列中的实数个数。将所有数字显示为小数点后两位。例如:输入 - 3
4.123 7.011 5.1
// 3 - 数字的数量(<100),其余的是数字本身。
结论 -4.12 7.01 5.10
这是我得到的代码:
#include <stdio.h>
#include <stdlib.h>
main(){
int n=0,i=0;
double *pn;
scanf("%d",&n); // Принимаю кол-во чисел в последовательности
pn=(double *)malloc(n*sizeof(double)); // Присваиваю указатель на первый элемент блока
// из n-ячеек памяти размером double
while(i<n) // Гоняю цикл n-раз
scanf("%f",pn+i++); // После присваивания инкрементирую i для
// смещения в следующем цикле, по блоку памяти
// выделенным malloc
while(i>0){
printf("%.2f\n",*(pn + n - i--)); // Вывод чисел n-раз с 2-мя десятичными знаками
}
free(pn); // Освобождаю память, хотя, она и так
// освободится после выхода из программы,
// если я правильно понимаю.
}
结果如下:
如果我使用类型指示器 int *
并输入int
数字,将格式从 更改为"%f"
,"%d"
那么它似乎可以工作:
我不明白——为什么它不适用于实数?
我想了解指针和地址算术,所以我选择了这个解决方案。