Click to See Complete Forum and Search --> : Compile error: "Conversion may lose significant digits "


Jody
May 3rd, 1999, 08:23 PM
Why am I getting all these warnings? I need your help! <thanks>


#include <conio.h>


#include <stdio.h>

#include <string.h>



void Date(long i);

void WriteData(void);

void ReadData(void);

void SortData(void);

void ComputeY2K(long i);

void Y2K(long i);

void Europe(long count);

void Julian(long count);

void Military(long count);

void Business(long count);



long day[5], month[5], year[5];

long hour[5], minute[5], second[5];

long hoursLeft[5], minutesLeft[5], secondsLeft[5];

long hoursPast[5], minutesPast[5], secondsPast[5];

unsigned long totalSeconds[5];



long sortCount[5];



int main()

{

long i;



while(1)

{

printf("\nPlease enter five dates\n\n");

for(i = 0; i < 5; i++) Date(i);

for(i = 0; i < 5; i++) ComputeY2K(i);

WriteData();

ReadData();

SortData();

printf("\n");

for(i = 0; i < 5; i++)

{

printf("\npress any key to continue...\n");

getch();

printf("Original Date: %ld/%ld/%ld\n",day[sortCount[i]], month[sortCount[i]], year[sortCount[i]]);

Y2K(sortCount[i]);

Europe(sortCount[i]);

Julian(sortCount[i]);

Military(sortCount[i]);

Business(sortCount[i]);

}

}

return(0);

}



void WriteData()

{

FILE *file;

long i;



file = fopen("data.dat","w");

if(file != 0)

{

for(i = 0; i < 5; i++)

{

fprintf(file,"%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld\n", day[i], month[i], year[i], hour[i], minute[i], second[i], hoursLeft[i], minutesLeft[i], secondsLeft[i], hoursPast[i], minutesPast[i], secondsPast[i], totalSeconds[i]);

}

fclose(file);

}

}



void ReadData()

{

FILE *file;

long i;



file = fopen("data.dat","r");

if(file != 0)

{

for(i = 0; i < 5; i++)

{

fscanf(file,"%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld,%ld\n", &day[i], &month[i], &year[i], &hour[i], &minute[i], &second[i], &hoursLeft[i], &minutesLeft[i], &secondsLeft[i], &hoursPast[i], &minutesPast[i], &secondsPast[i], &totalSeconds[i]);

}

fclose(file);

}

}



void SortData()

{

long i, j;



for(i = 0; i < 5; i++) sortCount[i] = i;



for(j = 0; j < 5; j++)

{

for(i = j+1; i < 5; i++)

{

if(year[sortCount[j]] > year[sortCount[i]])

{

sortCount[i] ^= sortCount[j];

sortCount[j] ^= sortCount[i];

sortCount[i] ^= sortCount[j];

continue;

}

if(year[sortCount[j]] == year[sortCount[i]])

{

if(month[sortCount[j]] > month[sortCount[i]])

{

sortCount[i] ^= sortCount[j];

sortCount[j] ^= sortCount[i];

sortCount[i] ^= sortCount[j];

continue;

}

}

if(year[sortCount[j]] == year[sortCount[i]])

{

if(month[sortCount[j]] == month[sortCount[i]])

{

if(day[sortCount[j]] > day[sortCount[i]])

{

sortCount[i] ^= sortCount[j];

sortCount[j] ^= sortCount[i];

sortCount[i] ^= sortCount[j];

continue;

}

}

}

}

}

}



void Date(long i)

{

while (1)

{

printf ("Please enter a date using the following format: \n(hh/mm/ss/mm/dd/yyyy) \n\n");

scanf("%ld/%ld/%ld/%ld/%ld/%ld" ,&hour[i], &minute[i], &second[i], &month[i], &day[i], &year[i]);

/* error trapping for month, day and year */

if(hour[i] < 24 && hour[i] >= 0 && minute[i] < 60 && minute[i] >= 0 && second[i] < 60 && second[i] >= 0 &&

(month[i] < 13) && (month[i] > 0) && day[i] < 32 && day[i] > 0 && year[i] < 2100 && year[i] > 1899)

break;

else

{

printf ("Data and/or format is incorrect!\n");

printf ("Please reenter the date using the following format: (mm/dd/yr)\n");

printf ("Date entered = %ld/%ld/%ld/%ld/%ld/%ld\n", hour[i], minute[i], second[i], month[i], day[i], year[i]);

}

}

}



void ComputeY2K(long i)

{

long yearDiff, days;

yearDiff = 1999 - year[i];



if(year[i] < 2000)

{

switch(month[i])

{

case 12:

days = 31 - day[i];

break;

case 11:

days = 31 + 30 - day[i];

break;

case 10:

days = 31 + 30 + 31 - day[i];

break;

case 9:

days = 31 + 30 + 31 + 30 - day[i];

break;

case 8:

days = 31 + 30 + 31 + 30 + 31 - day[i];

break;

case 7:

days = 31 + 30 + 31 + 30 + 31 + 31 - day[i];

break;

case 6:

days = 31 + 30 + 31 + 30 + 31 + 30 + 30 - day[i];

break;

case 5:

days = 31 + 30 + 31 + 30 + 31 + 30 + 30 + 31 - day[i];

break;

case 4:

days = 31 + 30 + 31 + 30 + 31 + 30 + 30 + 31 + 30 - day[i];

break;

case 3:

days = 31 + 30 + 31 + 30 + 31 + 30 + 30 + 31 + 30 + 31 - day[i];

break;

case 2:

days = 31 + 30 + 31 + 30 + 31 + 30 + 30 + 31 + 30 + 31 + 28 - day[i];

break;

case 1:

days = 31 + 30 + 31 + 30 + 31 + 30 + 30 + 31 + 30 + 31 + 28 + 31 - day[i];

break;

}

hoursLeft[i] = (yearDiff * 8760) + (days * 24) + (23 - hour[i]);

minutesLeft[i] = (60 - minute[i]) - 1;

secondsLeft[i] = (60 - second[i]) - 1;

totalSeconds[i] = ((hoursLeft[i] * 3600) + (minutesLeft[i] * 60) + secondsLeft[i]);

}

else

{

yearDiff = year[i] - 2000;



switch(month[i])

{

case 1:

days = day[i];

break;

case 2:

days = 31 + day[i];

break;

case 3:

days = 31 + 28 + day[i];

break;

case 4:

days = 31 + 28 + 31 + day[i];

break;

case 5:

days = 31 + 28 + 31 + 30 + day[i];

break;

case 6:

days = 31 + 28 + 31 + 30 + 31 + day[i];

break;

case 7:

days = 31 + 28 + 31 + 30 + 31 + 30 + day[i];

break;

case 8:

days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + day[i];

break;

case 9:

days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + day[i];

break;

case 10:

days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + day[i];

break;

case 11:

days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + day[i];

break;

case 12:

days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + day[i];

break;

}

hoursLeft[i] = (yearDiff * 8760) + ((days-1) * 24) + (hour[i]);

minutesLeft[i] = (minute[i]);

secondsLeft[i] = (second[i]);

totalSeconds[i] = ((hoursLeft[i] * 3600) + (minutesLeft[i] * 60) + secondsLeft[i]);

}

}



void Y2K(long i)

{

if(year[i] < 2000)

{

printf("Hours,minutes,seconds remaining to New Years Day 2000 is: %ld,%ld,%ld\n", hoursLeft[i], minutesLeft[i], secondsLeft[i]);

printf("The total # of seconds remaining to New Years Day 2000 is: %ld\n", totalSeconds[i]);

}

else

{

printf("Hours,minutes,seconds past New Years Day 2000 is: %ld,%ld,%ld\n", hoursLeft[i], minutesLeft[i], secondsLeft[i]);

printf("The total # of seconds past New Years Day 2000 is: %ld\n", totalSeconds[i]);

}

}



void Europe (long count) /* simple date conversion from scanf */

{

printf("European format = %ld/%ld/%ld\n", day[count], month[count], year[count]);

}





void Julian (long count) /* complex switch that adds day to month totals */

{

int days; /* monthly count using the days of each month */

switch (month[count])

{

case 1:

days = day[count];

break;

case 2:

days = 31 + day[count];

break;

case 3:

days = 31 + 28 + day[count];

break;

case 4:

days = 31 + 28 + 31 + day[count];

break;

case 5:

days = 31 + 28 + 31 + 30 + day[count];

break;

case 6:

days = 31 + 28 + 31 + 30 + 31 + day[count];

break;

case 7:

days = 31 + 28 + 31 + 30 + 31 + 30 + day[count];

break;

case 8:

days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + day[count];

break;

case 9:

days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + day[count];

break;

case 10:

days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + day[count];

break;

case 11:

days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + day[count];

break;

case 12:

days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + day[count];

break;

}



printf("Julian format = %ld", year[count]); /* print output in the (yyjjj) format */

if (days > 0 && days < 10)

printf ("00%d", days);

if (days >= 10 && days < 100)

printf ("0%d", days);

if (days >= 100 && days <= 366)

printf ("%d", days);

printf("\n");

}



/* second switch for abreviated month */

void Military(long count)

{

char Month[15];

switch (month[count])

{

case 1:

strcpy(Month,"JAN");

break;

case 2:

strcpy(Month,"FEB");

break;

case 3:

strcpy(Month,"MAR");

break;

case 4:

strcpy(Month,"APR");

break;

case 5:

strcpy(Month,"MAY");

break;

case 6:

strcpy(Month,"JUN");

break;

case 7:

strcpy(Month,"JUL");

break;

case 8:

strcpy(Month,"AUG");

break;

case 9:

strcpy(Month,"SEP");

break;

case 10:

strcpy(Month,"OCT");

break;

case 11:

strcpy(Month,"NOV");

break;

case 12:

strcpy(Month,"DEC");

break;

}

printf ("Military format ="); /* print output for Military conversion */

if (day[count] < 10)

printf (" 0%ld-", day[count]);

if (day[count] >= 10)

printf (" %ld-", day[count]);

printf ("%s-", Month);

printf ("%ld\n", year[count]);

}



/* third switch for full month */

void Business(long count)

{

char Month[15];

switch (month[count])

{

case 1:

strcpy(Month,"January");

break;

case 2:

strcpy(Month,"February");

break;

case 3:

strcpy(Month,"March");

break;

case 4:

strcpy(Month,"April");

break;

case 5:

strcpy(Month,"May");

break;

case 6:

strcpy(Month,"June");

break;

case 7:

strcpy(Month,"July");

break;

case 8:

strcpy(Month,"August");

break;

case 9:

strcpy(Month,"September");

break;

case 10:

strcpy(Month,"October");

break;

case 11:

strcpy(Month,"November");

break;

case 12:

strcpy(Month,"December");

break;

}

printf ("Business format = %ld %s %ld\n", day[count], Month, year[count]);

}