请问,关于scanf()在输入纯回车时发生了什么?
程序代码:
do { count++; pNum = realloc(pNum, count * sizeof(float)); if(scanf("%f", pNum + count - 1) == 0 ) return 1; }while(*(pNum + count - 1));
程序代码:
#include <stdio.h> #include <stdlib.h> float average(float *, int); int main(void) { float *pNum = NULL; int count = 0; pNum = malloc(count * sizeof(float)); do { count++; pNum = realloc(pNum, count * sizeof(float)); scanf("%f", pNum + count - 1); }while(*(pNum + count - 1) != 0.0f); printf("average = %f\n", average(pNum, count-1)); return 0; } float average(float *pNum, int count) { float sum = 0.0f; for(int i = 0; i < count; i++) { sum += *(pNum + i); } return sum/count; }习题8.1 定义一个函数,给函数传送任意多个浮点数,计算出这些数的平均值。从键盘输入任意个值,并输出平均值,以说明这个函数的执行过程。
书上的练习题答案,来源网友,虽然试着自己写,但连分配内存都想不到,还不行啊..
第一段do while()是我试着改写的,目的是在只输入回车时结束读入。(但不成功)
第二段完整代码是网友的答案,但他特别喜欢用do while(!= 0), 这样读入浮点数再计算平均值有个问题,就是输入中有0这个数字。
ps:答案没释放内存
请问:
1,答案代码,在输入为纯回车时,count不增加,是什么道理?
比如输入:1回车2回车3回车4回车回车回车0 ,输出为2.5(理想值).
按个人的理解,回车一次就会结束scanf()去进行while()判断,然后返回到do(),进而count++。
2, do while()循环,在do的函数体中,使用break ,是结束整个循环么(怕被百度,就写了个测试)
程序代码:
#include <stdio.h> int main() { int i = 0;/*没有这个不行*/ do { i = 0; i++; break; i++; }while(i<10); printf("%d\n",i); return 0; }do 和while 似乎算一个整体?,但是i的 作用域 还是在第二对大括号之间?(不在main()中声明不行);
像for()那种在大括号外声明变量,又是怎么回事呢?
[此贴子已经被作者于2019-4-25 02:33编辑过]