Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1

    [C++] strcpy invalid conversion from

    codice:
    #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
    codice:
      strcpy(valore,appoggio);
    errore: "invalid conversion from 'char' to 'char*'

    come mai?

  2. #2
    appoggio non è una stringa, è un singolo char...
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    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...

  4. #4
    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?
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    ti riporto il codice interessato:

    codice:
    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?

  6. #6
    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:
    codice:
        strcpy(valore,appoggio);
    cosa vuoi ottenere?
    Amaro C++, il gusto pieno dell'undefined behavior.

  7. #7
    Originariamente inviato da MItaly
    Certo, ma la domanda che ti ripeto è: con questa riga di codice:
    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...

  8. #8
    Dunque, se ho ben capito quello che vuoi fare è scrivere in valore il numero contenuto in appoggio, corretto? In tal caso, ti basta fare:
    codice:
    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    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:
    codice:
    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?

  10. #10
    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.
    L'alternativa più in stile C++ sono gli stringstream.
    EDIT: che libreria devo implementare per usare sprintf?
    Devi includere <cstdio>.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.