Il while ,non fa quello che vorresti che facesse !

hai il primo ciclo for ," che passa da una riga ad un altra" , il secondo for scansiona elemento per elemento la riga , se devi fare qualche modifica la devi fare all'interno
del primo for
il while dovrebbe provocare un ciclo infinito , mettiamo il caso j=0 condizione del while
j<20 sempre vera non uscirebbe mai dal ciclo , che a sua volta se la condizione if sempre
verificata , provocherebbe un continuo incremento di cont fino a quanto puo contenere

codice:
void controllariga()
{
    int i,j,k,cont=0;
    for(i=0;i<larghezza_colonne;i++)
    {
        for(j=0; j<altezza_righe;j++)
        {
                if(mappa2[i][j]==1)
                        cont++;
                    }

            if(cont<20)
            cont=0;
            else if(cont==20)//se cont =20 
          {
              for(k=0; k<20;k++)//tutti gli elementi della riga sono sostituiti con 0
                       mappa2[i][k]=0;// se cancellare significa per te eliminare 
             //devi seguire il consiglio di oregon ,ma dovrai farti una funzione e richiamarla
             //in questo punto 
             cont=0;    //azzera cont                          

          }
           }
}//fine controlla riga