请问,关于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编辑过]









是真不知道ctrl+z +回车也能结束输入啊,555