Scanf float e char

di Anonimizzato26275 il
6 risposte
Salve a tutti, la domanda è sicuramente molto banale, ma non capisco proprio perché l'esercizio non funziona... il codice che ho scritto è:
#include<stdio.h>
int main(){
	char operatore;
	float a,g;
	
	scanf("%f",&a);
	scanf("%f",&g);
	scanf("%c", &operatore);
	
	
	if(operatore=='+')printf("%f\n", a+g);
		else if(operatore=='-')printf("%f\n", a-g);
			else if(operatore=='%')printf("%f\n", (int) a% (int)g);
				else if(operatore=='/') printf("%f\n", a/g);
	
	return 0;
}
Il terminale esegue soltanto le prime due scanf e non quella per "operatore", assegnando alla variabile operatore lo stesso valore di g. Se invece la scanf per operatore la eseguo per prima, il "programma" funziona correttamente (ma per esigenze didattiche devo eseguirla per ultima). Non capisco perchè

6 Risposte

  • Hai visti male perché ovviamente nel char non ci può stare il valore di un float.

    Comunque dovresti risolvere inserendo uno spazio in

    " %c"
  • Più che visto male pensavo che, dato che un char può essere rappresentato con un intero, mi stampasse lo stesso numero con una lettura float (con i decimali a 0), invece no..

    Comunque la soluzione dello spazio funziona, grazie. Sapresti anche spiegarmi perché è necessario quello spazio?
  • Un char è 1 byte binario, un float 8 byte con rappresentazione floating point. Meglio non fare supposizioni ma studiarle...

    Lo spazio rimuove il newline peecedente e accetta il char
  • Lo studio è innegabilmente importante, ma le supposizioni sono alla base della sperimentazione e della pratica, essenziali nell'informatica e nel suo apprendimento, così come tute le altre scienze. Inoltre dubito che chiunque abbia imparato la programmazione senza sbattere la testa su queste cose, per cui il tuo moralismo ipocrita mi sembra fuori luogo.

    Grazie per l'aiuto e per la competenza tecnica, saluti.
  • Il moralismo ipocrita *****.
  • Chiudo il 3d che vedono sta finendo nel flame.
Devi accedere o registrarti per scrivere nel forum
6 risposte