Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327

    [C] Programma non riesce a lavorare sui numeri con la virgola

    Ciao a tutti ragazzi ho fatto un porgramma con le conoscenze che ho (poche) in grado di calcolare le tarife ebay;
    Qualora l'importo su cui voglio calcolare le tariffe sia con la virgola, questo non funziona, o meglio le calcola annulando la parte decimale;
    Ad es. se io voglio calcolare la tariffa di euro 65,5 questa è identica a quella di 65,00 euro..

    Ecco il sorgente:
    codice:
    #include <stdio.h>
    int getline(char []);
    double atof (char[]);
    main()
    {
    int c;
    double k,a,b,x,s,t,q,z;
    
    char vettore[1000];
    printf("Premi a per un oggetto venduto come asta online");
    printf("\nPremi b per un oggetto venduto a compralo subito su ebay.it");
    printf("\nPremi c per un oggetto venduto come oggetto del negozio\n\n");
    
    while((c=getchar())=='a'||c=='b'||c=='c'){
    if (c=='a'){
        printf("La tua selezione e' stata a\n\n");                    
        printf("inserisci il prezzo di vendita non comprensivo di spese di spedizione; \nEuro: \n");
        fflush(stdin);
        getline(vettore);
        k=atof(vettore); 
        
            if (k >= 50){
                a=k-2.625;
                b=a/100;
                x=b*3.5;
                s=k-x-2.625-5-2.5;
                printf("\nLa tua parte e': %.2f\n", s);    
                        }
            if (k<50 ){
                a=k/100;
                b=a*5.25;
                s=k-b-5-2.5;
                printf("\nla tua parte e': %.2f\n", s);   
                         } 
                          }
    if (c=='b'){
       printf("La tua selezione e' stata b\n\n");                    
        printf("inserisci il prezzo di vendita non comprensivo di spese di spedizione; \nEuro: \n");
        fflush(stdin);
        getline(vettore);
        k=atof(vettore); 
        
            if (k >= 50){
                a=k-2.625;
                b=a/100;
                x=b*3.5;
                s=k-x-2.625-5-3;
                printf("\nLa tua parte e': %.2f\n", s); 
                        }
            if (k<50 ){
                a=k/100;
                b=a*5.25;
                s=k-b-5-3;
                printf("\nla tua parte e': %.2f\n", s);  
                       } 
                       }
                       
    if (c=='c'){
       printf("La tua selezione e' stata c\n\n");                    
        printf("inserisci il prezzo di vendita non comprensivo di spese di spedizione; \nEuro: \n");
        fflush(stdin);
        getline(vettore);
        k=atof(vettore); 
        
            if (k >= 50){
                a=k-0.50;
                b=a/100;
                x=b*2.0;
                s=k-x-0.5-5;
                printf("\nLa tua parte e': %.2f\n", s); 
                        }
            if (k<50 ){
                a=k-0.25;
                b=a/100;
                x=b*2.0;
                s=k-x-0.25-5;  
                       } 
                       }
    
    
    }
    }
    int getline (char vettore[]){
    int c,i=0;
                                while((c=getchar())!= '\n')
                                                      vettore [i++]=c;
                                if (c=='\n')
                                             vettore[i++]=c;
    
                                vettore[i]= '\0';
                                return i;
                                }
    
    double atof (char vettore[]){
    double val, power;
    int i, sign;
                                for (i=0; isspace (vettore[i]); i++)
                                    ;
                                sign = (vettore[i] == '-')? -1 : 1;
                                if (vettore[i] == '+' || vettore[i] == '-')
                                   i++;
                                for (val = 0.0; isdigit(vettore[i]); i++)
                                    val = 10.0 * val + (vettore[i] - '0');
                                if (vettore[i] == '.')
                                   ;
                                for (power = 1.0; isdigit (vettore[i]); i++)
                                                                            {
                                                                             val = 10.0 * val + (vettore[i] - '0');
                                                                             power *= 10.0;
                                                                            }
    
                                return sign * val / power;
                               }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    I valori decimali vanno inseriti con il punto (.) decimale.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    L'ho fatto.. ma non funziona ugualmente.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Fai un esempio pratico una volta che esegui il tuo programma e vediamo se il problema si verifica anche nel mio caso ...

    EDIT: a prima vista il problema e' nella tua funzione

    atof

    ... controllala ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Ad es. con la selezione a, se calcolo la tariffa di 22,50 euro e di 22,00 euro mi viene semre 13.35 euro, che è la tariffa di 22 e non di 22.50.
    Per quanto riguarda atof, l'ho presa dal libro.
    Originariamente inviato da oregon
    Fai un esempio pratico una volta che esegui il tuo programma e vediamo se il problema si verifica anche nel mio caso ...

    EDIT: a prima vista il problema e' nella tua funzione

    atof

    ... controllala ...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non so se l'hai copiata bene ma il problema e' nella atof ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    per averla copiata bene, ne sono sicuro, perchè l'ho contrllata piu' volte..
    Casomai o problema potrebe essere che questa funzioe non è adatta a questo tipo di programma..
    Come posso aggiustarlo?
    Non è un esercizio questo, miservirebbe davvero questo programma, quindi magari accetterei anche un'altra soluzione purchè funzioni..

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Scusa ... ma se la funzione si chiama

    atof

    e serve a convertire una stringa in un valore in virgola mobile e l'hai trovata nel libro, deve funzionare ... probabilmente non e' stata copiata bene ...

    Comunque, se non vuoi usare la tua atof, usa quella di libreria ...

    Ovvero, elimina la tua atof dal tuo sorgente e ricompila.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    in che libreria si trova?
    E devo cancellare sia il corpo sia la dichiarazione?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Sì ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.