ISO C++ forbids comparison between pointer and integer

closed account (jhb7Djzh)
I wrote this program that takes in a month, day and year and outputs a day of the week. I'm getting an error when I check if the year is a leap year AND checking if the month is 1 or 2. Also, it's outputting a number instead of a string value at the end. Not entirely sure why. Thanks.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# include <iostream>
# include <string>
using namespace std;
//Declaring Functions
	void get_input(int&, int&, int&);
	int getCenturyValue(int);
	int getYearValue(int);
	int getMonthValue(int, int);
	int dayOfWeek(int, int, int);

//MAIN FUNCTION//////////////////////////////////////////////////////
int main(){
	int month, day, year, tempyear;
	get_input(month, day, year); //calling get_input fcn
	dayOfWeek(month, day, year); //calling dayOfWeek fcn
	
	
return 0;

//isLeapYear fcn///////////////////////////////////////////////////////
}
	bool isLeapYear(int year)
	{
	bool leap_year = false;
		if ((year%400) || (year%4) && !(year % 100)){
			leap_year = true;
		}
		return leap_year;
	}

//get_input fcn/////////////////////////////////////////////////////////////
void get_input(int& month, int& day, int& year){

	do{
		cout << "Input a month, day and year: ";

		cin >> month >> day >> year;
	}while(cin.fail()); //keep asking for input if the integers are not valid
	
}
//getCenturyValue fcn/////////////////////////////////////////////////
int getCenturyValue(int year)
{
	year = year/100;
	year = year%4;
	year = 3 - year;
	return year*2;
}
//getYearValue fcn//////////////////////////////////////////////////
int getYearValue(int year)
{
	int tempyear;
	year = year%100;
	tempyear = year/4;
	return year + tempyear;
}
//getMonthValue fcn///////////////////////////////////////////////////
int getMonthValue(int month, int year)
{
	isLeapYear(year);
	
		if(isLeapYear == true && month == 1){return 6;} //Error
		else if(isLeapYear == true && month == 2){return 2;}//Error
		else{
		switch(month){
		case 1: return 0; break;	case 2: return 3; break;	case 3: return 3; break;
		case 4: return 6; break;	case 5: return 1; break;	case 6: return 4; break;
		case 7: return 6; break;	case 8: return 2; break;	case 9: return 5; break;
		case 10: return 0; break;	case 11: return 3; break;	case 12: return 5; break;
		default: cout << "Input 1-12"; break;
		}
		}
}
// dayOfWeek fcn////////////////////////////////////////////////////////////
int dayOfWeek(int month, int day, int year)
{
	int tempyear;
	
	int dayOfWeek = (day + getMonthValue(month, year) + getYearValue(year) + getCenturyValue(year))%7;
	
	string dayOfTheWeek;
	
	switch(dayOfWeek){
	case '0': dayOfTheWeek = "Sunday"; break;
	case '1': dayOfTheWeek = "Monday"; break;
	case '2': dayOfTheWeek = "Tuesday"; break;
	case '3': dayOfTheWeek = "Wednesday"; break;
	case '4': dayOfTheWeek = "Thursday"; break;
	case '5': dayOfTheWeek = "Friday"; break;
	case '6': dayOfTheWeek = "Saturday"; break;
		
	}
	cout << "The date " << month << "/" << day << "/" << year << " is a " << dayOfTheWeek;
}
	


Last edited on
That's not how functions work, you try to compare the address of a function with a boolean, you need to compare the returned value of the function. Here's how to fix it:

1
2
3
4
      if(isLeapYear(year) && month == 1) 
         return 6;
      else if(isLeapYear(year) &&  month == 2)
         return 2;


Also dayOfWeek is an integer, you compare it with char values, the code representing ASCII '1' isn't 1, you need to use normal integers inside the switch, like this, just remove the apostrophes.

1
2
3
4
5
6
7
8
9
10
11
switch(dayOfWeek)
{
  case 0: dayOfTheWeek = "Sunday"; break;
  case 1: dayOfTheWeek = "Monday"; break;
  case 2: dayOfTheWeek = "Tuesday"; break;
  case 3: dayOfTheWeek = "Wednesday"; break;
  case 4: dayOfTheWeek = "Thursday"; break;
  case 5: dayOfTheWeek = "Friday"; break;
  case 6: dayOfTheWeek = "Saturday"; break;
		
}
Last edited on
Line 60: You're not using the return value of isLeapYear().
Line 61: isLeapYear is not the return value of isLeapYear(), it's the function itself.
1
2
3
4
5
6
bool leap = isLeapYear(year);
if(leap && month == 1){
    return 6;
}else if(leap && month == 2){
    return 2;
}

The switch in getMonthValue() could be replaced by this, making it more readable:
1
2
const int array[] = { 0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5 };
return array[month - 1];

By the way, what exactly does getMonthValue() return? I'm completely mystified by it. I've done a fair bit of date calculations and I've never seen anything like this.
closed account (jhb7Djzh)
Thanks for the help.

getMonthValue() returns a value to be used when calculating the day of the week. The problem provided a table with a list of values for each month to be used in the calculation. I don't know if this is what you're asking.

The question provides this link:
https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week
Topic archived. No new replies allowed.