Direi che questo:
è un ottimo modo per ottenere dei crash.codice:scanf("%s", &dare[i]);
dare è una std::string che non ha niente a che fare con i char*.
Meglio se usi cin e cout per input e output.
In più questa riga ( e il relativo while) :
effettua un confronto tra float che notoriamente è fonte di grattacapi a causa dell'approssimazione della macchina.codice:if(valoreDARE[i] != valoreAVERE[i])