Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] Funzione che ritorna un float

    Questo programma dovrebbe stampare un numero(anche decimale, a seconda dei casi), ma anche quando esegue una divisione ed ottiene un risultato decimale lo stampa intero(approssima), perchè?

    codice:
    #include <stdio.h>
    #include <string.h>
    #include <ctype.h>
    
    #define dmax 100
    
    float me(char frase[]);
    
    int main(){
        char frase[dmax];
        printf("Insert a string:\n");
        gets(frase);
        printf("La media dei caratteri e': %f",me(frase));
        getch();
    }
    
    float me(char frase[]){
        int i=0;
        int contp=0,contlp=0;
        while(frase[i]!='\0'){
            if((isalpha(frase[i]))||(isdigit(frase[i]))){
                contp++;
                contlp++;
                i++;
                while((isalpha(frase[i]))||(isdigit(frase[i]))){
                    contlp++;i++;
                }
            }
            else i++;
        }
        return contlp/contp;
    }

  2. #2
    Prima di eseguire la divisione scrivi esattamente questo:
    (float)

  3. #3
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Ciao . . . La funzione non ritorna il "vero" valore in float perchè prima di ritornare il valore, viene effettuato un cast ad int . . . Mi spiego meglio . . . Mettiamo caso che (esempio) contp e contlp alla linea del return contengono rispettivamente 2 e 3. Viene effettuata la seguente operazione 3/2 . . . Visto che gli operandi sono entrambi int il risultato (1.5) viene castato in int (1) e poi castato in float (1.0) per poi passarlo come valore di ritorno . . . Per risolvere potresti effettuare un cast in float per uno dei 2 operandi:
    codice:
     return (float)contlp / contp;
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  4. #4
    ok, grazie

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.