新人 关于如何结束一个do while()循环
一道书上的习题答案,来源自网上
程序代码:#include <stdio.h>
#include <stdlib.h>
int main(void)
{
float number = 0.0f;
float *pNumber = NULL;
int count = 0;
float sum = 0.0f;
pNumber = (float*)malloc(sizeof(float));
if(pNumber == NULL)
{
printf("内存分配失败\n");
return 1;
}
do
{
scanf("%f", &number);
count++;
pNumber = realloc(pNumber,count*sizeof(float));
*(pNumber + count - 1)=number;
}while(number != 0.0);
for(int i=0; i<count-1; i++)
{
sum += *(pNumber +i);
}
printf("平均值是 %f\n",sum/(count-1));
free(pNumber);
return 0;
}习题7.1 编写一个程序,计算从键盘输入的任意个浮点数的平均值。将所有的数存储到动态分配的内存中,之后计算并显示平均值。用户不需要事先指定要输入多少个数。本来试着自己写了下,结果完全做不来,还是抄了遍答案,
但这个有一个问题:比如要计算计算的数字中有0 ----“1.1 2.2 3.3 0 4.4 ”
1,因为本人才看完指针,想问下有没有简单解决的办法。
之前书上的例子倒是有,存为单字符数组,之后一位一位查找并分别存储的例子,但是还要分配动态内存,似乎变得很麻烦(没有学明白)。
程序代码: if(input[index]=='+' || input[index]=='-')
*(number_string+number_length++) = *(input+index++);
for(; isdigit(*(input+index)); index++)
*(number_string+number_length++) = *(input+index);
if(*(input+index)=='.')
{
*(number_string+number_length++) = *(input+index++);
for(; isdigit(*(input+index)); index++)
*(number_string+number_length++) = *(input+index);
}2,网上提供答案的这位,解决思路是否合适?不是指逻辑或是语法方面,是消减问题这种(忽略,没有直接要求的部分,或是小概率情况),因为我觉得第一段代码有取巧的意思,虽然只是个练习(之前100行的代码直接看得我蒙了好几天)。预谢
[此贴子已经被作者于2019-4-19 03:24编辑过]






