我制作了一个程序,接受最多21个输入的等级数据,并输出标记数,最大值和最小值,标准偏差和字母等级。因此,我创建了一个大小为21的数组。不幸的是,我的程序中的所有循环一直持续到array [i]!='\ 0',我不知道0等于null,所以它最初是相当的当人们输入0时,为了解决这个问题,我说如果输入0,那么该特定索引处的数组将被指定为0.000001。这解决了我的大多数问题,除了我的maxMin函数,由于某种原因,它仍然打印0.000001作为最小标记。这个功能如下所示......
void maxMin() {
float min = array[0];
float max = array[0];
for (int j = 1; array[j] != '\0'; j++) {
if (min > array[j]) {
min = array[j];
}
if (max < array[j]) {
max = array[j];
}
}
printf("The highest mark is: %f \n", max);
if (min == 0.000001) {
printf("The lowest mark is: 0 \n");
}
else {
printf("The lowest mark is: %f \n", min);
}
}
如何让此功能打印0作为最小标记?
答案 0 :(得分:1)
问题在于这句话:
if (min == 0.000001) {
0.000001
将被视为double
。十进制数0.000001
的表示形式为单精度float
和双精度double
。
您需要将后缀f
与float literal放在一起:
if (min == 0.000001f) {
当您添加f
后缀时,它会告诉编译器这是float
。
答案 1 :(得分:0)
另一个答案是:
if (min == 0.000001)
是问题的根源。
然而,添加&#39; F&#39;后缀不是完整的答案。
完整的答案是比较float
或double
值会(通常)失败,因为很多/大多数数字无法在float
或double
但是,发布的代码还有其他一些问题,例如在尝试确定数字末尾时float
与char
的比较。强烈建议修改输入21个数字的过程,以便代码跟踪输入的数量并将该计数传递给minmax()
函数。