codice:
const char * positivo="si"; //non serve creare array modificabili, bastano puntatori a risorse incorporate nell'eseguibile
const char * negativo="no";
char risposta[3];
bool riprova;
do
{
    cout << "Ci sono spese aggiuntive?";
    cin.getline(risposta,2); //in questo modo evito eventuali buffer overrun
    cin.sync(); //svuoto il buffer di input, che potrebbe contenere un '\n' di troppo
    if(!stricmp(risposta, positivo)) //se la risposta è 'si'.
    {
        int spese_add;
        cout << "A quanto ammontano queste spese agguntive?: ";
        cin >> spese_add;
        //...
        riprova=false;
    }
    else if(stricmp(risposta, positivo)!=0 && stricmp(risposta, negativo) !=0 )         // se la risposta è diversa da 'si' e da 'no'.
    {
        cout << "Rispondere con un si oppure con un no!\n\n";
        riprova=true;
    }
    else
        riprova=false;
} while(riprova);