Си, работа со списками

Помогите пожалуйста, мне необходимо выполнить программу при помощи использования списков. Подскажите, пожалуйста, почему выскакивает invalid operands of types 'float' and 'int' to binary 'operator%'

#include <stdio.h>  
#include<conio.h> 
#include<math.h>
#include<stdlib.h>

FILE * f = fopen("f_1.txt", "a+"), * f1 = fopen("f_3.txt", "w+");
struct nod {
  float info;
  nod * urm;
};
nod * prim, * ultim;

void adaugs(int x) {
  nod * nou = new nod;
  nou - > info = x;
  nou - > urm = NULL;
  if (prim == NULL) prim = nou;
  else ultim - > urm = nou;
  ultim = nou;
}

void afis(int n) {
  nod * p = prim;
  while (p) {
    printf("%3f", p - > info);
    if (n) fprintf(f1, "%3f", p - > info);
    p = p - > urm;
  }
}

void c1() {
  nod * p;
  p = prim;

  while (p) {
    if (p - > info % 4 == 0) {
      p - > info = 1;

      printf("\n%f", p - > info);

    } else {
      printf("\n%f", p - > info);
    }
    p = p - > urm;
  }

}

void c2(int m1) {
  nod * p;
  p = prim;
  while (p) {
    if (p - > info < m1) p - > info = p - > info + 5;
    printf("\n%f", p - > info);
    p = p - > urm;
  }
}

void c3() {
  nod * p;
  p = prim;
  while (p) {
    if (fabs((p - > info) % 3 == 0)) p - > info = 8;
    printf("\n%f", p - > info);
    p = p - > urm;
  }
}

int main() {
  int p1, x, c, m1;
  int l1, l2;
  prim = NULL;
  ultim = NULL;
  rewind(f);
  while (!feof(f)) {
    fscanf(f, "%f", & x);
    printf("%3f", x);
    adaugs(x);
  }
  printf("\nList of numbers: \n");
  afis(0);

  l1:
    printf("\n1 - 1 uslovie esli deliatsi na 4 zameniti na 01\n2 - 2 esli menishe m pribaviti 5\n3 - 3 esli po modyliu delitsa na 3 zameniti na 8  \n4 - Vihod \n--> ");

  int r;
  scanf("%i", & r);
  switch (r) {
  case 1:
    c1();
    break;

  case 2:
    printf("\nEnter m: ");
    scanf("%i", & m1);
    c2(m1);
    break;

  case 3:
    c3();
    break;

  case 4:
    goto l2;

  default:
    printf("\nIt's wrong\n");
    system("pause");
    goto l1;
  }
  l2:
    if (r != 4)
      puts("\nDo you want to try again?(y/n)");
  char v = getche();
  if (v == 'y') goto l1;
}

Ответы (0 шт):