-
error with code
Im getting an error when compiling that says "assignments makes integer from pointer without a cast". For all three assignment statements.
Code:
if (res == 0){
day = current_day;
mon = current_month;
year = current_year;
current_day
Current_month and
current_year are all in another file, that i have #included.
-
Code:
if (res == 0)
{
day = *current_day;
mon = *current_month;
year = *current_year;
....
}
Without the '*' you're assigning the addresses at which the pointers current_day, current_month and current_year are pointing to the integer variables day, mon and year. With '*' you're assigning the data that is stored at the address that the pointer is pointing at.
-
even with the pointers *. i still get the same error. Ill put all of the code so you can see it all.
Code:
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include "date.h"
#include "date.c"
/* true for leap years */
/************************MY PROGRAM**********************/
static char myday[7][15]=
{{"Sunday"},
{"Monday"},
{"Tuesday"},
{"Wednesday"},
{"Thursday"},
{"Friday"},
{"Saturday"}
};
int first_day_of_month ( int year, int month );
char* getday(int d, int m, int y){
int current_day;
int day = first_day_of_month( y, m );
current_day = (day + d - 1) % 7;
return myday[current_day];
}
int do_day ( char *cmd ) {
int day;
int month;
int year;
int res;
char mon;
res = sscanf( cmd, "%*c %d %d %d", &day, &month, &year );
if (res == 0){
day = *current_day;
mon = *current_month;
year = *current_year;
printf("%d %s %d is a %s \n", day, mon, year, getday(day, month, year));
}
if ( res >= 0 ) {
switch(month){
case 1:
printf("%d January %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 2:
printf("%d February %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 3:
printf("%d March %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 4:
printf("%d April %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 5:
printf("%d May %d is a %s \n", day, year, getday(day,month,year)); week_day(day, month, year);
break;
case 6:
printf("%d June %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 7:
printf("%d July %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 8:
printf("%d August %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 9:
printf("%d September %d is a %s \n", day, year, getday(day,month,year)); week_day(day, month, year);
break;
case 10:
printf("%d October %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 11:
printf("%d November %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 12:
printf("%d December %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
default :
printf("Invalid month\n");
return 0;
}
}
else{
printf( "Bad day command parameters\n" );
}
return 1;
}
int do_month ( char *cmd ) {
int month, year;
int res;
res = sscanf( cmd, "%*c %d %d", &month, &year );
if ( res == 2 ) {
switch(month){
case 1:
printf("January\n");
break;
case 2:
printf("February\n");
break;
case 3:
printf("March\n");
break;
case 4:
printf("April\n");
break;
case 5:
printf("May\n");
break;
case 6:
printf("June\n");
break;
case 7:
printf("July\n");
break;
case 8:
printf("August\n");
break;
case 9:
printf("September\n");
break;
case 10:
printf("October\n");
break;
case 11:
printf("November ");
break;
case 12:
printf("December\n");
break;
default :
printf("Invalid month\n");
return 0;
}
}
else {
printf( "Bad month command parameters\n" );
}
return 1;
}
void do_year ( char *cmd ) {
int year;
int res;
res = sscanf( cmd, "%*c %d", &year );
if ( res == 1 ) {
printf("%d \n", year);
}
else {
printf( "Bad year command parameters\n" );
}
}
int first_day_of_month ( int year, int month ) {
struct tm t = { 0 };
struct tm *tp;
time_t now;
t.tm_mday = 1;
t.tm_mon = month-1;
t.tm_year = year-1900;
now = mktime(&t);
tp = localtime(&now);
return tp->tm_wday;
}
int main ( ) {
char buff[BUFSIZ];
while ( fgets( buff, BUFSIZ, stdin ) != NULL ) {
switch ( buff[0] ) {
case 'd':
do_day ( buff );
return 0;
break;
case 'm':
do_month ( buff );
return 0;
break;
case 'y':
do_year ( buff );
return 0;
break;
default:
printf( "Unknown command: %c\n", buff[0] );
return 0;
break;
}
}
return 0;
}
date.c
Code:
#include <sys/time.h>
#include <time.h>
#include "date.h"
/* true for leap years */
int leap_year (int year) {
return year % 400 == 0 || year % 100 != 0 && year % 4 == 0;
}
/* the number of days in month of year */
int days_in_month (int month, int year) {
switch (month) {
case 9: case 4: case 6: case 11:
return 30;
case 2:
return leap_year(year) ? 29 : 28;
default:
return 31;
}
}
/* the weekday (0 = Sunday) of a given date
accurate for dates in the Gregorian calendar
which began on 14 September 1752 */
int week_day (int day, int month, int year) {
int d = 14; /* The modern calendar began on 14 ... */
int m = 9; /* ... September ... */
int y = 1752; /* ... 1752 ... */
int n = 4; /* ... which was a Thursday */
while (year > y || month > m || day > d) {
n++;
day--;
if (day < 1) { month--; day = days_in_month(month, year); }
if (month < 1) { year--; month = 12; }
}
return n % 7;
}
struct timeval tv;
int current_day () {
gettimeofday(&tv, 0);
return localtime(&tv.tv_sec)->tm_mday;
}
int current_month () {
gettimeofday(&tv, 0);
return localtime(&tv.tv_sec)->tm_mon + 1;
}
int current_year () {
gettimeofday(&tv, 0);
return localtime(&tv.tv_sec)->tm_year + 1900;
}
-
Now im getting a totally wrong date being outputted. current_year is saying 1970! something is still not working right but i cant figure out what it is. Also when i try to print out the month name i get an exception: status_access_violation.
Code:
int do_day ( char *cmd ) {
int day;
int month;
int year;
int res;
char mon;
res = sscanf( cmd, "%*c %d %d %d", &day, &month, &year );
if (res == 0){
day = current_day();
mon = current_month();
year = current_year();
printf("%d %d \n", day, year);
return 0;
}
-
Thanx salem, it fixed the problem. I assumed everything to be correct in that date.c file because the teacher set it up, but apparently not :). Um my next task is:
The program reads and executes multiple commands, each consisting of a single line. It terminates at end of file on input or when it reads a blank line.
Do you think that it means that the program reads a line of input, produces some output, and then waits for another line of input, and if its a blank line the program terminates?
I cant really understand what this is asking. I dont want any code for this, just an opinion of what you think the task is asking.
Cheers guys.
-
If there is one thing I have learned, it is to NEVER trust your tutors! They tell me all sorts of garbage, and hardly any of the programs they have written for me work!!;)
-
what im trying to do now is make it so that the person can enter either a number for the month, or the name of the month itself.
Like:d 23 November 2002
Am i on the right track here?
Code:
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include "date.h"
#include "date2.c"
/* true for leap years */
/************************MY PROGRAM**********************/
static char myday[7][15]=
{{"Sunday"},
{"Monday"},
{"Tuesday"},
{"Wednesday"},
{"Thursday"},
{"Friday"},
{"Saturday"}
};
int first_day_of_month ( int year, int month );
char* getday(int d, int m, int y){
int current_days;
int day = first_day_of_month( y, m );
current_days = (day + d - 1) % 7;
return myday[current_days];
}
int convert (char* converted, int failure){
int name;
if (!converted || !*converted){
return failure;
}
else if (name = atoi(converted)){
return name;
}
return failure;
}
int do_day ( char *cmd ) {
int day;
int month;
int year;
int res;
char mon;
char arg0[res];
char arg1[res];
char arg2[res];
strcpy(arg0, "");
strcpy(arg1, "");
strcpy(arg2, "");
res = sscanf( cmd, "%*c %s %s %s", arg0, arg1, arg2 );
if (res == 0){
day = current_dayy();
mon = current_monthh();
year = current_yearr();
switch(mon){
case 1:
printf("%d January %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 2:
printf("%d February %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 3:
printf("%d March %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 4:
printf("%d April %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 5:
printf("%d May %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 6:
printf("%d June %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 7:
printf("%d July %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 8:
printf("%d August %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 9:
printf("%d September %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 10:
printf("%d October %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 11:
printf("%d November %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 12:
printf("%d December %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
default:
printf("Invalid Month");
}
/*printf("%d %d \n", day, year); */
return 0;
}
if (res == 1){
mon = current_monthh();
year = current_yearr();
switch(mon){
case 1:
printf("%d January %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 2:
printf("%d February %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 3:
printf("%d March %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 4:
printf("%d April %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 5:
printf("%d May %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 6:
printf("%d June %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 7:
printf("%d July %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 8:
printf("%d August %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 9:
printf("%d September %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 10:
printf("%d October %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 11:
printf("%d November %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
case 12:
printf("%d December %d is a %s \n", day, year, getday(day, mon, year));
week_day(day, mon, year);
break;
default:
printf("Invalid Month");
}
/*printf("%d %d \n", day, year); */
return 0;
}
if (res == 2){
year = current_yearr();
switch(month){
case 1:
printf("%d January %d is a %s \n", day, year, getday(day, month, year));
week_day(day, month, year);
break;
case 2:
printf("%d February %d is a %s \n", day, year, getday(day, month, year));
week_day(day, month, year);
break;
case 3:
printf("%d March %d is a %s \n", day, year, getday(day, month, year));
week_day(day, month, year);
break;
case 4:
printf("%d April %d is a %s \n", day, year, getday(day, month, year));
week_day(day, month, year);
break;
case 5:
printf("%d May %d is a %s \n", day, year, getday(day, month, year));
week_day(day, month, year);
break;
case 6:
printf("%d June %d is a %s \n", day, year, getday(day, month, year));
week_day(day, month, year);
break;
case 7:
printf("%d July %d is a %s \n", day, year, getday(day, month, year));
week_day(day, month, year);
break;
case 8:
printf("%d August %d is a %s \n", day, year, getday(day, month, year));
week_day(day, month, year);
break;
case 9:
printf("%d September %d is a %s \n", day, year, getday(day, month, year));
week_day(day, month, year);
break;
case 10:
printf("%d October %d is a %s \n", day, year, getday(day, month, year));
week_day(day, month, year);
break;
case 11:
printf("%d November %d is a %s \n", day, year, getday(day, month, year));
week_day(day, month, year);
break;
case 12:
printf("%d December %d is a %s \n", day, year, getday(day, month, year));
week_day(day, month, year);
break;
default:
printf("Invalid Month");
}
/*printf("%d %d \n", day, year); */
return 0;
}
if ( res == 3 ) {
switch(month){
case 1:
printf("%d January %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 2:
printf("%d February %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 3:
printf("%d March %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 4:
printf("%d April %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 5:
printf("%d May %d is a %s \n", day, year, getday(day,month,year)); week_day(day, month, year);
break;
case 6:
printf("%d June %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 7:
printf("%d July %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 8:
printf("%d August %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 9:
printf("%d September %d is a %s \n", day, year, getday(day,month,year)); week_day(day, month, year);
break;
case 10:
printf("%d October %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 11:
printf("%d November %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
case 12:
printf("%d December %d is a %s \n", day, year, getday(day,month,year));
week_day(day, month, year);
break;
default :
printf("Invalid month\n");
return 0;
}
}
else{
printf( "Bad day command parameters\n" );
return 1;
}
}
int do_month ( char *cmd ) {
int month, year;
int res;
res = sscanf( cmd, "%*c %d %d", &month, &year );
if ( res == 2 ) {
switch(month){
case 1:
printf("January\n");
break;
case 2:
printf("February\n");
break;
case 3:
printf("March\n");
break;
case 4:
printf("April\n");
break;
case 5:
printf("May\n");
break;
case 6:
printf("June\n");
break;
case 7:
printf("July\n");
break;
case 8:
printf("August\n");
break;
case 9:
printf("September\n");
break;
case 10:
printf("October\n");
break;
case 11:
printf("November ");
break;
case 12:
printf("December\n");
break;
default :
printf("Invalid month\n");
return 0;
}
}
else {
printf( "Bad month command parameters\n" );
}
return 1;
}
void do_year ( char *cmd ) {
int year;
int res;
res = sscanf( cmd, "%*c %d", &year );
if ( res == 1 ) {
printf("%d \n", year);
}
else {
printf( "Bad year command parameters\n" );
}
}
int first_day_of_month ( int year, int month ) {
struct tm t = { 0 };
struct tm *tp;
time_t now;
t.tm_mday = 1;
t.tm_mon = month-1;
t.tm_year = year-1900;
now = mktime(&t);
tp = localtime(&now);
return tp->tm_wday;
}
int main ( ) {
char buff[BUFSIZ];
while ( fgets( buff, BUFSIZ, stdin )) {
if (strlen(buff) <= 1) {
break;
}
switch ( buff[0] ) {
case 'd':
do_day ( buff );
break;
case 'm':
do_month ( buff );
return 0;
break;
case 'y':
do_year ( buff );
return 0;
break;
default:
printf( "Unknown command: %c\n", buff[0] );
return 0;
break;
}
}
return 0;
}
-
Duffy, please don't post your whole source, try post just the section you're having trouble with. It makes answering your questions a lot easier. :)
-