多年来,我在C中没有做任何事情,现在我不能做简单的事情,我习惯于cin
和cout
以及现在的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", ¬aAuxiliar);
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;
}
答案 0 :(得分:2)
nota
是float
,但您使用%d
格式代码进行打印。 %d
期待int
;您需要%f
来打印浮点数。
C的标准I / O格式绝对不是类型安全的。提供格式代码时,必须确保相应的参数具有正确的类型。但是,如果您使用-Wall
选项进行编译(至少使用gcc
或clang
),则编译器会警告您。
此外,scanf("%c", &continuar);
读取单个字符而不跳过空格,这将是紧跟scanf("%f", ¬aAuxiliar);
读取的数字后面的字符。这个角色很可能是换行符。在阅读y
或n
之前,您需要跳过空格,以便使用:
scanf(" %c", &continuar);
答案 1 :(得分:0)
numeroDeNotas
变量已声明但未初始化。并且你在do while
循环中递增。
media = nota/numeroDeNotas;
printf("Average grade: %d", media);
并且您正在使用垃圾值来计算未定义输出的media
。将numeroDeNotas初始化为零。
答案 2 :(得分:0)
numeroDeNotas用变量类型声明 - 浮点数。因此,在编写printf语句时,您无法在代码中使用%d。