C 一道题再来说说关于scanf输入

题目如下:

一份计算机市场调查报告显示,市场上PC机的售价不同:6500,4990,5500,7200,6810,5700,5660,6900,5850,6250。编写程序,计算平均售价以及最大差价(最大差价=最高售价-最低售价)。

当然那题目给出的输入方式是不断空格的,那么难道因为这个我们就需要使用%d %d %d直到10吗?实际上并不需要,直接输入就可以了,缓冲区这个概念应该还记得,当scanf()读到空白字符(包括enter和space),剩下的并不是直接丢弃,而是存在缓冲区,而读取的时候从第一个非空白字符开始读取,所以,我们使用循环结构,一路用空格就行了,直到清空了缓冲区。

我们来看看这个程序的源码吧

#include <stdio.h>

#define NUM 10

int main(void)
{
    int i;
    float sales[NUM];
    float sum = 0, max = 0, min = 0;

    printf("Please input %d sales: \n", NUM);
    for (i = 0; i < NUM; i++) {
        scanf("%f", &sales[i]);
        sum += sales[i];
        if (i == 0) {   /* min max 初始化 */
            max = sales[i];
            min = sales[i];
        }
        if (sales[i] > max)
            max = sales[i];
        if (sales[i] < min)
            min = sales[i];
    }

    printf("ave = %f  range = %g\n", sum / NUM, max - min);

    return 0;
}

关于%g这是一个很好的新东西,在C 转换说明符%g已有介绍
扩展阅读:C 一个程序说说scanf()判断

植入部分

如果您觉得文章不错,可以通过赞助支持我。

如果您不希望打赏,也可以通过关闭广告屏蔽插件的形式帮助网站运作。

标签: 源码, 知识, 代码段, 语法, 题目

添加新评论