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; }

Rispondi quotando