PDA

View Full Version : Il float in C, ho qualche problema.


Vash88
24-09-2005, 19:53
Sono alle mie prime esperienze con il comando float, ci ho perso un oretta a capire come fare a farlo funzionare in questo codice ma senza risultato.
Vorrei capire come posso fare in modo che le tutte le variabili tranne numeroconto possano essere inserite con 2 decimali. Ho provato vari metodi fallendo, chi mi da una mano? :) in questo esercizio dovrei creare un programma che il limite di credito su un conto.

#include<stdio.h>
int main()
{
int numeroconto, saldoiniziale, spese, crediti, limitecredito, nuovosaldo;

while ( numeroconto != -1 ) {

printf( "Inserire il numero di conto (-1 per terminare l'applicazione):" );
scanf( "%d", &numeroconto );
printf( "Inserire il saldo iniziale:" );
scanf( "%d", &saldoiniziale );
printf( "Inserire le spese:" );
scanf( "%d", &spese );
printf( "Inserire i crediti:" );
scanf( "%d", &crediti );
printf( "Inserire limite di credito:" );
scanf( "%d", &limitecredito );

nuovosaldo = saldoiniziale + spese - crediti;

if ( nuovosaldo > limitecredito ) {
printf( "Numero conto:%d", numeroconto );
printf( "Limite di credito:%d", limitecredito );
printf( "Nuovo saldo:%d", nuovosaldo );
printf( "Limite di credito superato" );
}
}
printf("Uscire y/n?:");
if (getchar() != '\n');
while (getchar() != 'y');
return 0;
}

Ziosilvio
24-09-2005, 23:07
Vorrei capire come posso fare in modo che le tutte le variabili tranne numeroconto possano essere inserite con 2 decimali.
Se usi solo scanf come funzione di input, mi sa che non puoi.
Almeno, questo è quello che ho capito da una rapida lettura dell'Appendice B del Kernighan&Ritchie, che dovrebbe essere in tuo possesso.

Il programma mi sembra filosoficamente corretto, nel senso che puoi mettere il tipo float alle variabili che vuoi, e poi devi solo sostituire lo specificatore "%d" con "%f" dove serve.
Ti segnalo solo qualche punto:
int numeroconto, saldoiniziale, spese, crediti, limitecredito, nuovosaldo;

while ( numeroconto != -1 ) {
Errore classico: all'avvio del programma, numeroconto non è inizializzata, e per quanto ne sai, potrebbe valere proprio -1.
if (getchar() != '\n');
Non capisco il senso di dare un'istruzione che non fa niente se una certa condizione è vera, e non fa niente se la stessa condizione è falsa.
while (getchar() != 'y');
Forse ti conviene introdurre una variabile ausiliaria c, di tipo int (attenzione: il tipo restituito da getchar è int, non char), e fare una cosa del tipo:
while ((c=getchar()) != 'y' && c!='n')
;

Vash88
25-09-2005, 11:31
Se usi solo scanf come funzione di input, mi sa che non puoi.
Almeno, questo è quello che ho capito da una rapida lettura dell'Appendice B del Kernighan&Ritchie, che dovrebbe essere in tuo possesso.

Putroppo ora sono in possesso solo del corso completo di programmazione C di Deitel&Deitel, la spiegazione di float che ho avuto per ora è stata un pò limitata secondo me. Comunque ora che ho corretto il programma posso inserire tranquillamente con scanf dei dati di tipo float. Andrò a cercare il libro che mi hai suggerito. :)

Il programma mi sembra filosoficamente corretto, nel senso che puoi mettere il tipo float alle variabili che vuoi, e poi devi solo sostituire lo specificatore "%d" con "%f" dove serve.
Ti segnalo solo qualche punto:

Errore classico: all'avvio del programma, numeroconto non è inizializzata, e per quanto ne sai, potrebbe valere proprio -1.

Non capisco il senso di dare un'istruzione che non fa niente se una certa condizione è vera, e non fa niente se la stessa condizione è falsa.

Ho corretto tutti gli errori, per far terminare il programma con il dato -1 ho aggiunto un ramo di else, grazie per avermi segnalato i vari errori, ora il programma funziona. Alla prossima! :D

#include<stdio.h>
int main()
{
int numeroconto;
float saldoiniziale, spese, crediti, limitecredito, nuovosaldo;

printf( "Inserire il numero di conto ( -1 per terminare l'applicazione ):" );
scanf( "%d", &numeroconto );
while ( numeroconto != -1 ) {
printf( "Inserire il saldo iniziale:" );
scanf( "%f", &saldoiniziale );
printf( "Inserire le spese:" );
scanf( "%f", &spese );
printf( "Inserire i crediti:" );
scanf( "%f", &crediti );
printf( "Inserire limite di credito:" );
scanf( "%f", &limitecredito );
nuovosaldo = saldoiniziale + spese - crediti;
if ( nuovosaldo > limitecredito ) {
printf( "Numero conto:%d\n", numeroconto );
printf( "Limite di credito:%f\n", limitecredito );
printf( "Nuovo saldo:%f\n", nuovosaldo );
printf( "Limite di credito superato\n\n" );
}
else {
printf( "Inserire il numero di conto ( -1 per terminare l'applicazione ):" );
scanf( "%d", &numeroconto );
}
}
printf("Uscire y/n?:");
while (getchar() != 'y');
return 0;
}