Problema con il char[ ]

di il
2 risposte

Problema con il char[ ]

Salve a tutti,
ho un problema il il passaggio del char n[]
nella chiamata al metodo add della classe votazioni, viene presa solo la parte prima dello spazio vuoto oltre al fatto che il ciclo while si blocca e va al infinito

#include <iostream>
#include <iomanip>

using namespace std;

struct partito {
char nome[30];
unsigned voti; };

class votazioni { 

private:
partito pd;
partito forza_it;
partito lega_verde;

public:
votazioni();
~votazioni();
unsigned add(char x[ ]);
void stampa();
void svuota();
unsigned get_voti(char x[ ]);
unsigned total();
};

votazioni::votazioni(){
strcpy(pd.nome,"pd");
strcpy(forza_it.nome,"forza italia");
strcpy(lega_verde.nome,"lega verde");
pd.voti = 0;
forza_it.voti = 0; 
lega_verde.voti = 0;  }

votazioni::~votazioni(){     }

unsigned votazioni::add(char x[ ]){
if( !strcmp(pd.nome,x)  ){
pd.voti += 1; 
return pd.voti;  }
if( !strcmp(forza_it.nome,x)  ){
forza_it.voti += 1;
return forza_it.voti;  }
if(!strcmp(lega_verde.nome,x)){
lega_verde.voti += 1; 
return lega_verde.voti; }
else 
return 0;  }

void votazioni::stampa(){
cout << "voti pd: " << pd.voti <<endl;
cout << "voti forza_it: " << forza_it.voti << endl;
cout << "voti lega_verde: " << lega_verde.voti << endl;  }

void votazioni::svuota() {
pd.voti = 0;
forza_it.voti = 0; 
lega_verde.voti = 0; }

unsigned votazioni::get_voti(char x[ ]){
if(!strcmp(x,pd.nome))
return pd.voti;
if(!strcmp(x,forza_it.nome))
return forza_it.voti; 
if(!strcmp(x,lega_verde.nome))
return lega_verde.voti; 
else 
return 0;     }

unsigned votazioni::total(){
return (pd.voti + lega_verde.voti + forza_it.voti);  }

int main(){


votazioni _2017;

cout << setw(39) << "--elezioni--" << endl;

int s;  
char n[30];
while(1){


cout << "1) per votare un partito" << endl;
cout << "2) per vedere voti di un partito" << endl;
cout << "3) per vedere il totale dei voti" << endl;
cout << "4) per resettare i voti" << endl;
cout << "5) per stampare i voti" << endl;

cin >> s;

switch(s)   {

case 1: 
cout << "inserisci nome partito";
cin >> n;
_2017.add((char*)n);
break;

case 2:
cout << "inserisci nome partito";
cin >> n;
_2017.get_voti((char*)n);
break;

case 3:
cout << "voti totali: " << _2017.total() << endl;
break;

case 4:
_2017.svuota();
cout << "resettato!" << endl;
break;

case 5:
_2017.stampa();
break;

default:
cout << "inserisci numeri da 1-5!!" << endl;     
break;   }   }

}

2 Risposte

  • Re: Problema con il char[ ]

    L'input di cin si ferma al primo spazio. Usa cin.getline

    Scrivere

    _2017.add((char*)n);

    non ha senso, basta

    _2017.add(n);
  • Re: Problema con il char[ ]

    Grazie oregon adesso funziona alla perfezione
Devi accedere o registrarti per scrivere nel forum
2 risposte