PDA

Visualizza la versione completa : [C++] strcpy invalid conversion from


razielmitico
23-02-2013, 22:21
#include <iostream>
#include <cstdlib> // Per srand() e rand()
#include <math.h>
#include <string.h>

using namespace std;

int random_v (void)
{
int a;
a=(rand() % 13) + 1;
return a;
}
int random_s (void)
{
int b;
b=(rand() % 4) + 1;
return b;
}

int carta (void)
{
int seme,i;
char semes[6],valore[4],appoggio,stringdest[10];
seme=random_s();
switch (seme)
{
case 1:
strcpy(semes,"picche");
break;
case 2:
strcpy (semes,"cuori");
break;
case 3:
strcpy (semes,"fiori");
break;
case 4:
strcpy (semes,"quadri");
break;
}
appoggio=random_v();
switch (appoggio)
{
case 1:
strcpy(valore,"asso");
i=0;
break;
case 11:
strcpy(valore,"J");
i=0;
break;
case 12:
strcpy(valore,"Q");
i=0;
break;
case 13:
strcpy(valore,"K");
i=0;
break;
}
if (i==1)
strcpy(valore,appoggio);
strcat(valore,stringdest);
strcat (semes,stringdest);

return stringdest;

int main ()
{
char stringdest,a,b;
cout<<carta();
}
}




il compilatore mi da errore nella string

strcpy(valore,appoggio);
errore: "invalid conversion from 'char' to 'char*'

come mai?

MItaly
23-02-2013, 22:38
appoggio non una stringa, un singolo char...

razielmitico
23-02-2013, 23:10
Originariamente inviato da MItaly
appoggio non una stringa, un singolo char...

in quella parte di codice se i=1 nella variabile di appoggio ci sono solo numeri...

MItaly
23-02-2013, 23:15
Non cambia il fatto che appoggio un char, e non puoi passarlo a strcpy, che si aspetta una stringa. Cosa ci vuoi fare esattamente? Convertire da numero a stringa? Copiare il singolo carattere in questione nella stringa di destinazione? Altro ancora?

razielmitico
23-02-2013, 23:25
ti riporto il codice interessato:



appoggio=random_v();
switch (appoggio)
{
case 1:
strcpy(valore,"asso");
i=0;
break;
case 11:
strcpy(valore,"J");
i=0;
break;
case 12:
strcpy(valore,"Q");
i=0;
break;
case 13:
strcpy(valore,"K");
i=0;
break;
}
if (i==1)
{
valore_2=appoggio;
strcat(valore_2,stringdest);
strcat (semes,stringdest);
}
else
{
strcat (valore,stringdest);
strcat(semes,stringdest);
}

return stringdest;


in pratica la variabile d'appoggio diventare un valore random calcolato da una funzione dichiarata all'inizio,questa variabile restuisce un intero (un valore random da 1-13),con la selezione multipla se il valore 1,11,12,13 assegna rispetivamente alla variabile "valore" una stringa ma se non contiene nessuno di questi numeri,e se ne accorge con la variabile i,deve essere assegnato alla variabile valore il numero contenuto nell'appoggio,ora,i char non possono contenere anche i numeri?

MItaly
23-02-2013, 23:28
Originariamente inviato da razielmitico
ora,i char non possono contenere anche i numeri?
Certo, ma la domanda che ti ripeto : con questa riga di codice:


strcpy(valore,appoggio);

cosa vuoi ottenere?

razielmitico
23-02-2013, 23:35
Originariamente inviato da MItaly
Certo, ma la domanda che ti ripeto : con questa riga di codice:


strcpy(valore,appoggio);

cosa vuoi ottenere?

mi sono accorto ora che non pu funzionare,perch appoggio un numero in quel caso (un numero da 2 a 10) mentre valore una char dichiarata all'inizio (poich se un numero tra 1,11,12,13 dovranno contenere una parola o lettera) siccome sapevo che i char possono contenere numeri volevo usare lo stesso la variabile appoggio per far inserire il valore numero (se da 2-10) nella variabile valore,facendo l'assegnazione normale
valore=appoggio
non funziona poich mi diche che appoggio un char,allora ho provato con questa funzione ma neanche questa funziona...

MItaly
23-02-2013, 23:59
Dunque, se ho ben capito quello che vuoi fare scrivere in valore il numero contenuto in appoggio, corretto? In tal caso, ti basta fare:


sprintf(valore, "%d", (int)appoggio);

( necessario convertire in int dato che %d si aspetta un int, e %c - che andrebbe bene per i char - lo stampa come carattere e non come intero)

Nota comunque che nel tuo codice lasci i non inizializzato, per cui se la carta ha un nome speciale non c' problema (i viene impostato manualmente a zero nello switch), ma altrimenti il suo valore rimane casuale... inizializza i a 1 quando lo dichiari.

razielmitico
24-02-2013, 01:22
Originariamente inviato da MItaly
Dunque, se ho ben capito quello che vuoi fare scrivere in valore il numero contenuto in appoggio, corretto? In tal caso, ti basta fare:


sprintf(valore, "%d", (int)appoggio);

( necessario convertire in int dato che %d si aspetta un int, e %c - che andrebbe bene per i char - lo stampa come carattere e non come intero)

Nota comunque che nel tuo codice lasci i non inizializzato, per cui se la carta ha un nome speciale non c' problema (i viene impostato manualmente a zero nello switch), ma altrimenti il suo valore rimane casuale... inizializza i a 1 quando lo dichiari.

non avevo notato il fatto di i grazie!
ma in pratica il comando sprintf cosa fa?

EDIT: che libreria devo implementare per usare sprintf?

MItaly
24-02-2013, 02:12
Originariamente inviato da razielmitico
ma in pratica il comando sprintf cosa fa?
Fa quello che farebbe printf, ma invece di scrivere sullo standard output scrive nella stringa specificata. In ogni caso, ti basta una ricerca su Google per trovarne la documentazione (http://www.cplusplus.com/reference/cstdio/sprintf/).
L'alternativa pi in stile C++ sono gli stringstream.


EDIT: che libreria devo implementare per usare sprintf?
Devi includere <cstdio>.

Loading