[C]Programma che non stampa a video

frab1
Ciao,
HO il seguente sorgente che, definita una struttura, sulla base di un valore fornito da linea di comando, ricava sin, cos e tan di quel valore espresso in radianti. Purtroppo non riesco a capire perchè non viene stampato nulla a video.. :cry: Qualcuno riesce a spiegarmi il perche? Grazie.
#include <stdio.h>
#include <math.h>
#define TOO_LARGE 100

typedef struct{
	double sine,cosine,tangent;
}TRIGONOMETRIA;


int main(void)
{
	float radian_val;
	printf("\nInserire angolo in radianti:\n");
	scanf("%f",&radian_val);
	TRIGONOMETRIA *get_trigvals(float radian_val)
	{
		static TRIGONOMETRIA result;
		if (radian_val>TOO_LARGE) {
			printf("Valore di ingresso troppo grande!");
	//		return NULL;
		}
		result.sine=sin(radian_val);
		printf("\nIl seno dell'angolo vale:%f\n ;",result.sine);
		result.cosine=cos(radian_val);
		printf("\nIl coseno dell'angolo vale:%f\n ;",result.cosine);
		result.tangent=tan(radian_val);
		printf("\nLa tangente dell'angolo vale:%f\n ;",result.tangent);
	//	return (&result);
	}
}

Risposte
vict85
Ti suggerisco di andarti a rivedere come si definisce e crea una funzione e come si chiama all'interno del main. Trovo che la mancata visualizzazione sia l'ultimo dei problemi del tuo codice.

Inoltre non capisco perche hai definito result come statica.

frab1
il codice che ho proposto è inserito tale e quale nelle slides di spiegazione del mio professore...non si capisce una mazza...stavo provando a seguirle ma sono vergognose...ora mi cerco un buon manuale nel quale le cose siano spiegate per bene.
Grazie per ora! :)

minomic
Ciao,
mi unisco alle perplessità di vict85: quel codice era illeggibile. Se te lo ha dato il tuo professore... spero tu sia un buon autodidatta! :-D

Ti posto una possibile implementazione corretta di quello che stavi cercando di fare:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define TOO_LARGE 100

typedef struct
{
    double sine,cosine,tangent;
} TRIGONOMETRIA;


TRIGONOMETRIA *get_trigvals(float radian_val)
{
    TRIGONOMETRIA *result;

    /* alloco lo spazio per la mia struttura */
    result = (TRIGONOMETRIA *) malloc(sizeof(TRIGONOMETRIA));

    if (radian_val>TOO_LARGE)
    {
        printf("Valore di ingresso troppo grande!");
        return NULL;
    }

    /* result è un puntatore: per accedere ai campi della struttura uso -> */
    result->sine = sin(radian_val);
    result->cosine = cos(radian_val);
    result->tangent = tan(radian_val);
    return (result);
}


int main(void)
{
    float radian_val;
    printf("\nInserire angolo in radianti: ");
    scanf("%f",&radian_val);

    TRIGONOMETRIA *trig = get_trigvals(radian_val);
    if(trig != NULL)
    {
        printf("\nIl seno dell'angolo vale: %f\n", trig->sine);
        printf("\nIl coseno dell'angolo vale: %f\n", trig->cosine);
        printf("\nLa tangente dell'angolo vale: %f\n", trig->tangent);
    }
    return 0;
}


Facci sapere se hai qualche dubbio.

:smt039

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.