有条件的不遵循 C 中的指令

Conditional Not Following Instructions in C

我制作了一个程序,最多可以输入 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] != '[=10=]'; 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 作为最小标记?

问题是这个语句:

if (min == 0.000001) {

0.000001 将被视为 double。十进制数 0.000001 表示为单精度 float 和双精度 double.

您需要将后缀 f 与 float 文字放在一起:

if (min == 0.000001f) {

当你输入 f 后缀时,它会告诉编译器这是一个 float.

正如另一个回答所述:

if (min == 0.000001) 

是问题的根源。

但是,添加 'F' 后缀并不是全部答案。

整个答案是,比较 floatdouble 值(通常)会失败,因为 many/most 数字无法在 float 或 [=12= 中准确表示]

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