PDA

Visualizza la versione completa : [C] Problema codice


Registil
19-09-2017, 21:56
Salve, dovendo scrivere un programma con cui effettuare somma, sottrazione, moltiplicazione, divisione, modulo, radice quadrata, potenza di 3di due numeri dati in ingresso sullo standard input dall’utente (numeri reali), ho provato a scrivere il seguente codice:


#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <math.h>


int main () {


float a, b, c, d, e, f, g_1, g_2, h_1, h_2, i_1, i_2;


printf("Inserire il primo valore \n");


scanf("%d", &a);//Comando per definire le variabili di cui si devono inserire i valori


printf ("Inserire il secondo valore \n");


scanf("%d", &b);


printf ("La somma dei due valori inseriti e': %f \n", c);


c = a + b;


printf ("La differenza dei due valori inseriti e': %f \n", d);


d = a - b;


printf("Il prodotto dei due valori inseriti e': %f \n", e);


e = a * b;


printf("Il quoziente dei due valori inseriti e' %f \n", f);


f = a / b;


printf("Il modulo del primo valore inserito e': %f \n", g_1);


g_1 = abs(a);


printf ("Il modulo del secondo valore inserito e': %f \n", g_2);


g_2 = abs(b);


printf ("La radice quadrata del primo valore inserito e': %f \n", h_1);


h_1 = sqrt(a);


printf("La radice quadrata del secondo valore inserito e': %f \n", h_2);


h_2 = sqrt(b);


printf("La potenza di 3 del primo valore inserito e':%f \n", i_1);


i_1 = (a) * (a) * (a);


printf("La potenza di 3 del secondo valore inserito e': %f \n", i_2);


i_2 = (b) * (b) * (b);


system ("PAUSE"); //COMANDO DI ATTESA


return 0; //valore di ritorno del programma


}

Il problema è che quando compilo mi riporta, per tutte le operazioni, un valore pari a 0. Inoltre, se provo ad inserire come primo valore un intero il programma non mi permette neanche di inserire il secondo valore e si termina immediatamente. Ho provato a controllare più volte il tutto e non sono riuscito a capire quale possa essere il motivo.

Grazie in anticipo a chi mi aiuterà.

MItaly
19-09-2017, 22:16
%d si usa per leggere variabili di tipo int, per i float si usa %f. Se abiliti i warning del tuo compilatore (-Wall -Wextra su gcc e clang, /W4 su VC++) questo tipo di errore ti viene segnalato.

Scara95
19-09-2017, 22:16
Con %d inserisci interi non numeri in virgola mobile.
Stai calcolando tutti i valori dopo averli utilizzati, quindi è un caso fortuito che ti vengano tutti 0, potrebbe andarti peggio.

Scara95
19-09-2017, 22:17
I was late

Registil
21-09-2017, 22:03
Grazie mille per le risposte, il codice ora funziona a dovere!

P.S. Chiedo scusa per rispondere in ritardo, ma con l'inizio dei corsi universitari sono riuscito solo ora a visionare il post per bene e rispondere.

Loading