Newsgroup: it.comp.lang.c
Titolo: AIUTATEMI A RISOLVERE QUESTO ENIGMA!!!!

Ciao a tutti. Premetto che ho iniziato da due settimane a studiare il C.
Pertanto ho voluto fare un piccolo programma in grado di calcolare i mesi e
gli anni in base al un numero di giorni immesso. Avendo utilizzato variabili
unsigned gli ho detto di visualizzare un messaggio di errore se veniva
assegnato un valore superiore a 65535. Il problema è che con Turbo C 2.0 ciò
non accade, mentre con Dev C++ tutto fila liscio. Come mai? Grazie a coloro
che mi dedicheranno due minuti.
Ecco il codice:
#include<stdio.h>
#define ANNO 365
#define MESE 31
unsigned int giorni,anni,mesi,giorni_rim,mesi,grim2;
int main()
{
 /*queste printf impostano un messagio di benvenuto*/
 printf("              BENVENUTO!!!!!          \n\n\n");
 printf("            Questo programma permette di calcolare a quanti mesi e
anni\n");
 printf("            corrispondono X giorni. Purtroppo il programma
restituisce \n");
 printf("            un valore approssimato poichŠ i giorni di un mese sono
stati\n");
 printf("            impostati a 31.\n\n
");
 /*qui viene eseguito il codice per il calcolo*/
while(giorni<=65535)               /*imposta la condizione che col Turbo C
non viene rispettata*/
{
 printf("\n\n");
 printf("Inserisci il numero di giorni:");
 scanf("%u",&giorni);
 if(giorni<MESE)
  printf("%u giorni equivalgono a %u giorni!",giorni,giorni);
 else
 {
  anni=giorni/ANNO; /*calcola quanti anni ci sono nei giorni da
    calcolare*/
  giorni_rim=giorni%ANNO;
 if(giorni_rim>MESE)
 {
  mesi=giorni_rim/MESE;/*calcola quanti mesi ci sono nei giorni
  che rimangono da calcolare*/
  grim2=giorni_rim%MESE;/*compie l'ultimo calcolo relativo ai giorni*/
  printf("%u giorni equivalgono a %u anni, %u mesi e %u
giorni",giorni,anni,mesi,grim2);
 }
 else
  printf("%u giorni equivalgono a %u anni, %u giorni",anni,giorni_rim);
 }
}        /*qui termina il blocco del while*/
          /*e qui inizia il famigerato messaggio d'errore che appare solo se
eseguo l'applicazione
             da Dev c++*/
 printf("\n\n");
 printf("ATTENZIONE!Il valore calcolato potrebbe essere inesatto!\n\n");
 printf("Inserisci un valore compreso tra 0 e 65535. GRAZIE\n\n");
   return 0;
}

 che mi dedicheranno due minuti.
Non conosco Dev C++ ma nel turboC per DOS le variabili unsigned int
occupano 16 bit, quindi il valore massimo e' proprio 65535, quindi non
puo' mai diventare maggiore.
Credo che il problema sia questo.
ciao
donCiccio

 ha scritto nel messaggio
news:9fe9sr$os8$1...@nreadB.inwind.it...


 ha scritto nel messaggio
news:9febdp$fbk$1...@nreadA.inwind.it...


 > valore massimo č 65535?
nel tuo codice hai scritto:
unsigned int giorni,anni,mesi,giorni_rim,mesi,grim2;
...
while(giorni<=65535)
{
  ...
}
printf("\n\n");
printf("ATTENZIONE!Il valore calcolato potrebbe essere inesatto!\n\n");
printf("Inserisci un valore compreso tra 0 e 65535. GRAZIE\n\n");
dal momento che giorni e' un unsigned int, che su TurboC per DOS occupa solo
16 bit quindi valore massimo proprio 65535, la condizione di mantenimento
del while risultera' sempre vera e non verra' mai eseguito il codice che
segue, cioe' le printf.
ciao
donCiccio

 > > valore massimo è 65535?


 unsigned int.
credo sia un frontend di mingw

scusa ma....che vuol dire?
