创作灵感:
由于老师布置的C语言作业中,让我们算十个输的平均值,那么问题来了,如果事先并没有说明个数,阁下又该如何应对?
通过查阅资料,可以得到“键盘缓冲区”的概念,可以通过getchar函数读取并取走键盘缓冲区的数据,这样我们只需要检测到,如果用户按下回车键(读取‘\n’)时,记录输入的个数和跳出scanf输入循环,然后将数据计入平均值函数,即可得到我们想要的答案。
具体代码如下
#include<stdio.h>
float Score_adver[20]={0};
float Adver(float Score_adver[],int Count) { //定义求平均数的函数
float Sum=0;
int i=0;
for(i=0;i<Count;i++) //通过对输入数据进行累加
{
Sum+=Score_adver[i];
}
return Sum/Count*1.0; //返回平均值
}
int main()
{
printf("请输入成绩:\n");
float adver=0;
char ch = ' '; //定义一个空格(因为进入循环会读走一个数据)
int Count=0; //所以需要向缓存区存入一个空格
int n = 0;
int i = 0;
ungetc(ch, stdin); //输入一个空格到缓存区防止跳过第一个数据)
for(i=0;(ch=getchar())!='\n';i++){ //判断是否有回车键,若有则跳出for循环,进入函数
scanf("%f",&Score_adver[i]); //输入数据到分数数组
Count++; //判断输入数据的个数
}
adver=Adver(Score_adver,Count); //传入数组和个数,进行计算平均值
printf("平均数是%5.2f",adver);
}
细节:因为进入scanf循环的时候他会把第一个数据读走,所以事先要给键盘缓存区输入一个空格,让它读走的
运算结果如下:
有了此基础,基本可以解决一般的不确定数输入问题,例如:不确定个数排序问题:
#include<stdio.h>
float Arr[20]={0};
void Arrange(float Arr[],int Count) { //定义求平均数的函数
int i=0;
int j=0;
int t=0;
for(j=1; j<Count; j++) { //冒泡排序法对十个数据开始排序
for(i=0; i<(Count-j); i++) { //通过前一个数组与与后一个数组比较大小
if(Arr[i]>Arr[i+1]) { //如果前一个小于后一个,则相互交换一下位置
t=Arr[i];
Arr[i]=Arr[i+1];
Arr[i+1]=t;
}
}
}
}
int main()
{
printf("请输入成绩:\n");
float adver=0;
char ch = ' '; //定义一个空格
int Count=0;
int n = 0;
int i = 0;
ungetc(ch, stdin); //输入一个空格到缓存区防止跳过第一个数据
for(i=0;(ch=getchar())!='\n';i++){ //判断是否有回车键,若有则跳出for循环,进入函数
scanf("%f",&Arr[i]); //输入数据到分数数组
Count++; //判断输入数据的个数
}
Arrange(Arr,Count);
printf("\n排序后的数如下:\n"); //输出排序后的数组
for(i=0; i<Count; i++) {
printf("%.2f\t",Arr[i]);
}
}
运行结果如下:
更多的需要大家自行探索啦~以上是我的学习记录,谢谢观看,欢迎交流讨论!