在C编程中,为什么循环后我的printf不打印?

时间:2019-02-16 23:44:30

标签: c printf

我需要打印用户输入数组的总和和平均值。因此,如果用户输入2,4,6,9,10,则应打印6。 但是,循环结束后,我的printf不再打印任何内容。

即使我将printf放在数组中,它也只会打印出0。

#include <stdio.h>
#include <math.h>

int main()
{
    int i;
    double num[6],average, sum=0, closest;
    printf("Enter 6 doubles\n");

    for (i=0; i<6; i++)
    {
    scanf("%lf",&num[i]);
    sum += num[i];

    }
    average = sum/i;
    printf("Average %d", average); 
}

3 个答案:

答案 0 :(得分:0)

您需要在代码中做一些事情。您应该确保他们输入6个数字(在您的开篇文章中仅列出5),这会造成问题。我将打印更改为使用此格式,并去除了一些您不使用的变量。

#include <stdio.h>
#include <math.h>

int main()
{
    int i;
    double sum = 0;

    printf("Enter 6 doubles\n");
    for (i = 0; i < 6; i++)
    {
        double value;
        scanf("%lf", &value);
        sum += value;
    }

    printf("Average = %f", sum / i);
}
  

输入6个双打:

     

2 4 6 9 10 10

     

平均值= 6.833333

答案 1 :(得分:0)

这个问题不是重复的,但是我在StackOverflow here

上找到了答案
  

stdout流已缓冲,因此将仅显示   到达换行符后(或被告知时)缓冲。你有一个   几个选项可以立即打印:

     

使用fprintf打印到stderr:

     

fprintf(stderr, "I will be printed immediately");

     

在需要使用fflush时刷新标准输出:

     

printf("Buffered, will be flushed"); fflush(stdout); // Will now print everything in the stdout buffer

     

您还可以禁用缓冲   通过使用setbuf在stdout上:

     

setbuf(stdout, NULL);

然后关于您的代码,这里有几点说明:

  • man 3 printf中所述,转换说明符f已转换为双浮点值,因此不需要长度修饰符标志。
  • 平均值也是两倍,因此,如果将其打印为整数%d,则会丢失实际价值部分,请考虑同时使用%f

答案 2 :(得分:0)

以下建议的代码:

  1. main()使用正确的签名
  2. 更正对printf()的调用中使用的格式
  3. 将'\ n'附加到'printf()'中的格式字符串,以便立即输出数据,而不是在程序退出后输出数据
  4. 赋予“魔术”数字(即6)有意义的名称
  5. 正确检查I / O错误并处理任何此类错误
  6. 消除不必要的变量
  7. 不包括那些未使用的头文件
  8. 说明为什么包含每个头文件
  9. 适当限制局部变量“ i”的范围
  10. 干净地编译
  11. 执行所需的功能

现在,建议的代码:

#include <stdio.h>   // printf(), scanf(), perror()
//#include <math.h>
#include <stdlib.h>  // exit(), EXIT_FAILURE


#define MAX_ENTRIES 6

int main( void )
{
    //int i;
    // double num[6];
    double num;
    double average;
    double sum=0.0;
    // double closest;

    printf("Enter %d doubles\n", MAX_ENTRIES );

    for (int i=0; i< MAX_ENTRIES; i++)
    {
        if( scanf( "%lf", &num ) != 1 )
        {
            fprintf( stderr, "scanf for number failed\n" );
            exit( EXIT_FAILURE );
        }

        sum += num;
    }

    average = sum / MAX_ENTRIES;
    printf("Average %f\n", average); 
}

典型的代码运行结果为:

Enter 6 doubles
1.0
2.0
3.0
4.0
5.0
6.0
Average 3.500000