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

    cannot pass objects of non-POD

    Ciao ragazzi,
    stavo provando a fare un piccolo programmino per far inserire all'utente dei conti e dei valori da attribuire a questi per poi stampare gli articoli in partita doppia, ma al momento della visualizzazione viene fuori quest'errore:


    39 C:\Users\Utente\Desktop\c++\programma economia\main.cpp [Warning] cannot pass objects of non-POD type `struct std::string' through `...'; call will abort at runtime

    Questa è la stringa che ho usato per stampare:
    printf("%s | %.2f |\n", dare[p], valoreDARE[p]);

    Qualche consiglio?

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    se magari ci posti anche che cosa sono quei "dare" e "valoreDARE"

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Manca il linguaggio, sia nel titolo che nella discussione. E' richiesto dal regolamento.

    Inoltre, direi che la parte di codice (1 linea!!) che hai postato è decisamente esigua per capire dove stia il problema... almeno dovresti dare delle informazioni sui due array che utilizzi in quella istruzione...

    Posso solo ipotizzare che gli dia fastidio il simbolo | (pipe) all'interno della stringa di formattazione... ma è un'ipotesi più campata in aria che pensata.


    Aggiungo il linguaggio al titolo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  4. #4
    Il linguaggio è c++ (andavo un po' di fretta mi so ndimenticato)

    Comunque ecco a voi il codice intero:
    codice:
    #include <cstdlib>
    #include <iostream>
    #include <string.h>
    
    using namespace std;
    
    int main()
    {
    string dare[100], avere[100];
    float valoreDARE[1000], valoreAVERE[1000];
    char risp;
    int i = 0, p = 0;
    
    
    do {
       do {
           printf("Inserisci il conto in dare: ");
           scanf("%s", &dare[i]);
           printf("Inserisci il valore del conto: ");
           scanf("%f", &valoreDARE[i]);
           printf("Inserisci il conto in avere: ");
           scanf("%s", &avere[i]);
           printf("Inserisci il valore del conto: ");
           scanf("%f", &valoreAVERE[i]);
           if(valoreDARE[i] != valoreAVERE[i]) {
                     printf("ERRORE! I valori DARE e AVERE non combaciano!\n");
                     getchar();
                     }
           }
    while(valoreDARE[i] != valoreAVERE[i]);
    
    
    printf("Vuoi inserire un altro articolo in P.D.? s/n");
    scanf("%s", &risp);
    getchar();
    i++;
    }
    while(risp != 'n');
    
    for(p=0;p<i;p++) {
                     printf("%s | %.2f     |\n", dare[p].c_str(), valoreDARE[p]);
                     printf("%s |          | %.2f\n", avere[p].c_str(), valoreAVERE[p]);
                     printf("-----------------------------------------------\n");
                     }
    getchar();getchar();
    }
    Grazie per la rapidità delle risposte!

  5. #5
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Direi che questo:
    codice:
    scanf("%s", &dare[i]);
    è un ottimo modo per ottenere dei crash.
    dare è una std::string che non ha niente a che fare con i char*.
    Meglio se usi cin e cout per input e output.

    In più questa riga ( e il relativo while) :
    codice:
    if(valoreDARE[i] != valoreAVERE[i])
    effettua un confronto tra float che notoriamente è fonte di grattacapi a causa dell'approssimazione della macchina.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  6. #6
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    e direi che visto che è c++ di non mischiare gli I/O del c con quelli del c++

    quindi se è c++ usa cin e cout

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Concordo con Sto, ma se proprio vuoi, al posto di

    codice:
    scanf("%s", &risp);
    getchar();
    scrivi

    codice:
    fflush(stdin);
    scanf("%c", &risp);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    Grazie mille! Ora funziona almeno per questa parte del codice, ancora ce n'è di lavoro per fargli fare in automatico liquidazione iva e bilancio
    Ed infatti ho già trovato un'imprecisione... se il conto ha degli spazi in automatico salta le altre domande e si ferma al getchar, come ovviare?

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Usa la fgets con stdin ... o le cin , cout ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Ho provato con gets, ma dopo aver inserito il valore numerico della seconda domanda passa direttamente alla quarta senza aspettare che inserica il conto in avere :\

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 © 2025 vBulletin Solutions, Inc. All rights reserved.