|
| Cant quite figure out whats going wrong!? Fra : Simon Mansfield |
Dato : 05-12-04 16:41 |
|
Im trying to make a C program that takes in a date (birthday) and tells the
user how many days it has been since that date. So far I have got this... It
compiles ok but then crashes, with no idea why I was wondering if anyone
else had any idea??
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
int day, mnth, yr; //The users birthday.
time_t now, birth;
struct tm *birthday, store;
double i;
now = time(0);
//Prompt the user for birthdate.
printf("Please enter your birthday [DD/MM/YYYY]: ");
//Read in the birthday.
scanf("%2d/%2d/%4d", &day, &mnth, &yr);
printf("\n\n");
store.tm_mday = day;
store.tm_mon = (mnth - 1);
store.tm_year = yr;
*birthday = store;
birth = mktime(birthday);
i = difftime(now, birth);
printf("%f", 1);
getchar();
getchar();
return 0;
}
| |
Thomas Lykkeberg (05-12-2004)
| Kommentar Fra : Thomas Lykkeberg |
Dato : 05-12-04 19:08 |
|
On Sun, 05 Dec 2004 15:40:54 GMT, "Simon Mansfield"
<global0inferno@ntlworld.com> wrote:
> *birthday = store;
Hmmm, birthday is not initialised to point to anything... This
operation copies the content of "store" into the location that
birthday points to.... and what is that ?
/Thomas
----
My e-mail is composed in the following manner:
<sirname>.<lastname>(a)privat(dot)dk
| |
Bertel Lund Hansen (05-12-2004)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 05-12-04 19:10 |
|
Simon Mansfield skrev:
> struct tm *birthday, store;
> *birthday = store;
= is not defined to be used that way. If it were, the whole
struct would be copied to an undefines area since birthday has
not been set to point to anything.
Use this instead:
*birthday = &store;
which makes birthday point to the same area that store occupies.
Remember that modifying any of them (store/*birthday) will modify
the other.
--
Bertel
http://bertel.lundhansen.dk/ FIDUSO: http://fiduso.dk/
| |
Bertel Lund Hansen (05-12-2004)
| Kommentar Fra : Bertel Lund Hansen |
Dato : 05-12-04 22:50 |
| | |
Bertel Brander (05-12-2004)
| Kommentar Fra : Bertel Brander |
Dato : 05-12-04 22:36 |
|
Simon Mansfield wrote:
> Im trying to make a C program that takes in a date (birthday) and tells the
> user how many days it has been since that date. So far I have got this... It
> compiles ok but then crashes, with no idea why I was wondering if anyone
> else had any idea??
>
> #include <stdio.h>
> #include <stdlib.h>
To use memset, add:
#include <string.h>
> #include <time.h>
>
> int main() {
>
> int day, mnth, yr; //The users birthday.
> time_t now, birth;
> struct tm *birthday, store;
> double i;
>
> now = time(0);
>
> //Prompt the user for birthdate.
> printf("Please enter your birthday [DD/MM/YYYY]: ");
>
> //Read in the birthday.
> scanf("%2d/%2d/%4d", &day, &mnth, &yr);
> printf("\n\n");
>
Better clear store first:
memset(&store, 0, sizeof(store));
> store.tm_mday = day;
> store.tm_mon = (mnth - 1);
> store.tm_year = yr;
tm_year is years since 1900, so change the above to:
store.tm_year = yr - 1900;
>
> *birthday = store;
Let birthday point at store, change the above to:
birthday = &store;
> birth = mktime(birthday);
> i = difftime(now, birth);
>
> printf("%f", 1);
The parameter should be i not 1
>
> getchar();
> getchar();
>
> return 0;
> }
>
>
--
"I learned more from a three minute record
than I ever learned in school"
- Bruce Springsteen
| |
|
|