新人 关于如何结束一个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编辑过]