【问题标题】:This C program gives zero average.Whats wrong in it?这个 C 程序给出的平均值为零。有什么问题吗?
【发布时间】:2017-07-19 17:21:27
【问题描述】:
#include <stdio.h>
#include <stdlib.h>

int main()
{
    {
        float test1Marks, test2Marks, test3Marks, averageMarks;
        averageMarks = (test1Marks + test2Marks + test3Marks) / 3;

        printf("Test 1 Marks:");
        scanf("%f", &test1Marks);

        printf("Test 2 Marks:");
        scanf("%f", &test2Marks);

        printf("Test 3 Marks:");
        scanf("%f", &test3Marks);

        printf("Average Marks of tests are:%f", averageMarks);

    }
    return 0;
}

一切正常,但给出平均值的最终输出是错误的。 但是,当我将值分配给其中两个变量并通过 scanf 语法输入第三个值时,它会给出平均值,否则不会。

【问题讨论】:

  • 您需要在计算平均值之前将值读入变量中。
  • 可能不会帮助未来的读者...
  • 对于大多数堆栈溢出用户来说,这个问题可能太简单了:)
  • 为什么有两对花括号?
  • 刚接触编程

标签: c average scanf


【解决方案1】:

移动averageMarks=(test1Marks+test2Marks+test3Marks)/3; 在最后一个 scanf在你打印平均值的print 语句之前!

int main()
{
    float test1Marks,test2Marks,test3Marks,averageMarks;

    printf("Test 1 Marks:");
    scanf("%f",&test1Marks);

    printf("Test 2 Marks:");
    scanf("%f",&test2Marks);

    printf("Test 3 Marks:");
    scanf("%f",&test3Marks);

    /* Now with determined test1Marks, test2Marks, and test3Marks
       values we can compute their average:
    */
    averageMarks=(test1Marks+test2Marks+test3Marks)/3;

    printf("Average Marks of tests are:%f",averageMarks);

    return 0;
}

【讨论】:

  • test1Marks 是未初始化的,不一定是 0。在初始化/赋值之前尝试读取 test1Marks 是 UB。
【解决方案2】:

在计算平均值之前,您需要将值读入变量中 @John Bode 1

读取值后计算averageMarks=(test1Marks+test2Marks+test3Marks)/3;

在另一种语言中,这种方法可能有效,但 C 需要顺序评估。

【讨论】:

    【解决方案3】:

    averageMarks=(test1Marks+test2Marks+test3Marks)/3; 不是一个函数,它是一系列执行某些操作的语句,它在运行时将这些变量中的值相加,然后除以 3,然后将结果分配给 averageMarks。

    当您读取值时,scanf 在执行时将其读取的任何值放入变量中,然后您打印出 averageMarks,它已在之前使用您创建的空变量进行计算和存储第一条语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多