计算平均计划时的输出错误

时间:2015-06-11 01:46:00

标签: c

多年来,我在C中没有做任何事情,现在我不能做简单的事情,我习惯于cincout以及现在的Java。我试图制作一个简单的程序来计算考试笔记的平均X数量。输出是“随机数”,并且在输入音符之前检查中断程序。那是为什么?

#include <stdio.h>

int main(void) {
    int numeroDeNotas;
    float nota = 0.0;
    float notaAuxiliar = 0.0;
    char continuar;
    int media;

    do{
    printf("Enter the exam grade\n");
    scanf("%f", &notaAuxiliar);
    nota += (int) notaAuxiliar;
    numeroDeNotas++;
    printf("Do you want to continue? Enter n if you want to stop\n");
    scanf("%c", &continuar);
    }while(continuar != 'n');

    printf("%d\n\n", nota);
    printf("%d\n\n", numeroDeNotas);

    media = nota/numeroDeNotas;
    printf("Average grade: %d", media);
    return 0;
}

3 个答案:

答案 0 :(得分:2)

notafloat,但您使用%d格式代码进行打印。 %d期待int;您需要%f来打印浮点数。

C的标准I / O格式绝对不是类型安全的。提供格式代码时,必须确保相应的参数具有正确的类型。但是,如果您使用-Wall选项进行编译(至少使用gccclang),则编译器会警告您。

此外,scanf("%c", &continuar);读取单个字符而不跳过空格,这将是紧跟scanf("%f", &notaAuxiliar);读取的数字后面的字符。这个角色很可能是换行符。在阅读yn之前,您需要跳过空格,以便使用:

scanf(" %c", &continuar);

答案 1 :(得分:0)

numeroDeNotas 

变量已声明但未初始化。并且你在do while循环中递增。

media = nota/numeroDeNotas;
printf("Average grade: %d", media);

并且您正在使用垃圾值来计算未定义输出的media。将numeroDeNotas初始化为零。

答案 2 :(得分:0)

numeroDeNotas用变量类型声明 - 浮点数。因此,在编写printf语句时,您无法在代码中使用%d。