Salve a tutti!
Ho realizzato un programma che però non funziona come dovrebbe.
Il programma deve definire due vettori v1 e v2 di N elementi di tipo intero e memorizzare nei vettori valori “accettabili” acquisiti da tastiera secondo queste regole:
a. In v1 devono essere memorizzati solo i valori positivi ed i valori negativi multipli di 3
b. In v2 devono essere memorizzati solo i valori negativi non multipli di 3 e dispari
Tutti gli altri valori acquisiti devono essere ignorati e quando uno dei due vettori è pieno deve finire il riempimento.

Il mio programma però non mi inserisce i valori nel vettore.
Mi spiegate dov è l'errore?

codice:
#include <stdio.h>
#include <stdlib.h>
#define N 5

int main()
{
    int v1[N], v2[N], ind1, ind2, dato, numdati1, numdati2;

    ind1 = 0;
    ind2 = 0;
    printf("Inserire elementi:\n");

    while ((ind1<N) && (ind2<N))
      {
          scanf("%d", &dato);

         if ((dato>=0) | (dato%3==0))
         {
             v1[ind1] = dato;
             ind1 ++;
         }

         else
             if ((dato<0 && dato%3!=0) || (dato%2 != 0))
             {
                 v2[ind2] = dato;
                 ind2 ++;
             }
      }

 numdati1 = ind1;
 numdati2 = ind2;
    printf("Il contenuto del primo vettore e':\n");
          for (ind1=0; ind1<numdati1; ind1++)
            printf("%d\n", v1[N]);

    printf("Il contenuto del secondo vettore e':\n");
         for (ind2=0; ind2<numdati2; ind2++)
             printf("%d\n", v2[N]);


    return 0;
}