C中的条件不遵循指令

时间:2017-10-22 23:07:06

标签: c conditional

我制作了一个程序,接受最多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作为最小标记?

2 个答案:

答案 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;后缀不是完整的答案。

完整的答案是比较floatdouble值会(通常)失败,因为很多/大多数数字无法在floatdouble

但是,发布的代码还有其他一些问题,例如在尝试确定数字末尾时floatchar的比较。强烈建议修改输入21个数字的过程,以便代码跟踪输入的数量并将该计数传递给minmax()函数。