Allora c'è un errore nel do while e una cosetta da sistemare:
il do while ripete il ciclo se la condizione è vera, mentre esce se è falsa. A questo punto bisogna sottolineare che nel c++ (e in tutti i linguaggi di programmazione) i valori diversi da 0 vengono interpretati come true e lo 0 come false.
Altra cosetta da sistemare è inserire un cin.ignore(1); dopo cin >> esci; questo perchè cin non esegue il flush dell stin come il getline e sull standard input rimane \n che viene dato in pasto al nuovo getline.
Altro problema la funzione elimina_carattere ritorna un intero, ma tu lo assegni a un char senza fare cast espliciti, cosa che non è ottimale ne per la leggibilità del codice che per la correttezza dello stesso
io correggerei così:
codice:
#include <iostream>
#include <stdlib.h>
using namespace std;
int elimina_carattere(char[], const char);
const int DIM = 100;
int elimina_carattere(char S[], const char X) {
int el=0, i=0;
int cont=0;
while(S[i]!='\0') {
if(S[i]==X) {
int j = i;
while(S[j]!='\0') {
S[j] = S[j+1];
j++;
}
cont ++; i--;
} i++;
} return cont;
}
int main() {
int esci = 1;
do{
char X;
char S[DIM];
cout << "INSERISCI UNA STRINGA" << endl;
cin.getline(S,DIM-1);
cout << "INSERISCI UN CARATTERE" << endl;
cin >> X;
int ris;
ris = elimina_carattere(S, X);
if(!ris) { cout << "NESSUN CARATTERE ELIMINATO" << endl; }
else { cout << ris << " CARATTERI ELIMINATI" << endl;
cout << "LA STRINGA RESTANTE E': " << S << endl; }
cout << "\n UN ALTRO GIRO? (Y=1,N=0)" << endl;
cin >> esci;
cin.ignore(1);
system("cls");
}
while(esci);
system("PAUSE");
return 0;
}