0

Hi.
Ive made this program using if statements i see no errors in it but i dont know my program isnt working on my if statements i mean the if statements are not used in the output. Can u plzz figure out the problem? It works only till scanf statement. #include<stdio.h>

#include<conio.h>
void main ()
{
int d,m;
clrscr();
printf ("Enter the date of your birth\t");
scanf("%d",& d);
printf("\nEnter the month of your birth\t");
scanf("%d",& m);
printf("\n%d-%d",d,m);
if (d>=21 && d<=19 && m==3 && m==4)
{
printf("\nYour star is ARIES");
}
if (d>=20 && d<=20 && m==4 && m==5)
{
printf("\nYour star is TAURUS");
}
if (d>=21 && d<=21 && m==5 && m==6)
{
printf("\nYour star is GEMMINI");
}
if (d>=22 && d<=22 && m==6 && m==7)
{
printf("\nYour star is CANCER");
}
if (d>=23 && d<=22 && m==7 && m==8)
{
printf("\nYour star is LEO");
}
if (d>=23 && d<=22 && m==8 && m==9)
{
printf("\nYour star is VIRGO");
}
if (d>=23 && d<=22 && m==9 && m==10)
{
printf("\nYour star is LIBRA");
}
if (d>=23 && d<=21 && m==10 && m==11)
{
printf("\nYour star is SCORPIO");
}
if (d>=22 && d<=21 && m==11 && m==12)
{
printf("\nYour star is SAGITTARIUS");
}
if (d>=22 && d<=19 && m==12 && m==1)
{
printf("\nYour star is CAPRICORN");
}
if (d>=20 && d<=18 && m==1 && m==2)
{
printf("\nYour star is AQUARIUS");
}
if (d>=19 && d<=20 && m==2 && m==3)
{
printf("\nYour star is PISCES");
}
getch();
}
5
Contributors
16
Replies
17
Views
8 Years
Discussion Span
Last Post by lonely_girl
0

Impossibility is playing a role in your distress. You could not have been born in two different months, nor could you have been born in a day that is earlier and later that a significant period, at the same time.

There's an order of precedent as well to take in consideration. Use () with && and || operators.

0

Rephrasing one of your if statements into english:

if (d>=21 && d<=19 && m==3 && m==4)

That reads: If the day of the month is both more than or equal to 21 and also less than or equal to 19 {this is impossibility one} and the month number is 3 and the month number is 4 {two}

What you want is something like:

If the month number is 3 and the day of the month is the 21st or later, OR the month number is 4 and the day of the month is the 19th or earlier

so you need to end up with a test that looks something like the following:

if ( ( ___ && ___ ) || ( ____ && ___ ) )
0

Rephrasing one of your if statements into english:

if (d>=21 && d<=19 && m==3 && m==4)

That reads: If the day of the month is both more than or equal to 21 and also less than or equal to 19 {this is impossibility one} and the month number is 3 and the month number is 4 {two}

What you want is something like:

If the month number is 3 and the day of the month is the 21st or later, OR the month number is 4 and the day of the month is the 19th or earlier

so you need to end up with a test that looks something like the following:

if ( ( ___ && ___ ) || ( ____ && ___ ) )

thx this thing worked but isnt it possible if i dont use the OR operator and i get the same result with &&????

0

What is the problem with using || ? It is a completely valid part of the C language. There might be some obscure way of doing the same comparison without it, but it would be useless to even try it.

0

AND and OR are 2 similar but different constructs.

month = 3 && month == 4
Is an impossibility, it will NEVER happen

month == 3 || month == 4
happens for months 3 and 4

0

Hello I modified your source code try the source code below:

#include<stdio.h>
int d,m;
main ()
{

clrscr();
printf ("Enter the date of your birth: ");
scanf("%d",& d);
printf("\nEnter the month of your birth: ");
scanf("%d",& m);
printf("\n%d-%d",d,m);

if ((d>=21 || d<=19) && (m==3 || m==4))
printf("\nYour star is ARIES");

else if ((d>=20 || d<=20) && (m==4 || m==5))
printf("\nYour star is TAURUS");

else if ((d>=21 || d<=21) && (m==5 || m==6))
printf("\nYour star is GEMMINI");

else if ((d>=22 || d<=22) && (m==6 || m==7))
printf("\nYour star is CANCER");

else if ((d>=23 || d<=22) && (m==7 || m==8))
printf("\nYour star is LEO");

else if ((d>=23 || d<=22) && (m==8 || m==9))
printf("\nYour star is VIRGO");

else if ((d>=23 || d<=22) && (m==9 || m==10))
printf("\nYour star is LIBRA");

else if ((d>=23 || d<=21) && (m==10 || m==11))
printf("\nYour star is SCORPIO");

else if ((d>=22 || d<=21) && (m==11 || m==12))
printf("\nYour star is SAGITTARIUS");

else if ((d>=22 || d<=19) && (m==12 || m==1))
printf("\nYour star is CAPRICORN");

else if ((d>=20 || d<=18) && (m==1 || m==2))
printf("\nYour star is AQUARIUS");

else if ((d>=19 || d<=20) && (m==2 || m==3))
printf("\nYour star is PISCES");

getch();
}

0

That's very pretty code, but it should have been posted using code tags.

When posting c code, please use c code tags
[code=c] /* Your code here */

[/code]

And logically, the if statements you have don't meet the needed criteria.

For example your first if: if ((d>=21 || d<=19) && (m==3 || m==4)) Is valid for the following dates:
3/1 to 3/19, 3/21 to 3/31, 4/1 to 4/19, and 4/21 to 4/30

(blatantly borrowed from Wikipedia)

Under the tropical zodiac, the Sun is in Aries roughly from March 21 to April 19, by definition beginning at vernal equinox.

0

That's very pretty code, but it should have been posted using code tags.

When posting c code, please use c code tags
[code=c] /* Your code here */

[/code]

And logically, the if statements you have don't meet the needed criteria.

For example your first if: if ((d>=21 || d<=19) && (m==3 || m==4)) Is valid for the following dates:
3/1 to 3/19, 3/21 to 3/31, 4/1 to 4/19, and 4/21 to 4/30

(blatantly borrowed from Wikipedia)

Thanks
hey i dont know how to use the code tags can u plz help me with that too???

0

Hello I modified your source code try the source code below:

#include<stdio.h>
int d,m;
main ()
{

clrscr();
printf ("Enter the date of your birth: ");
scanf("%d",& d);
printf("\nEnter the month of your birth: ");
scanf("%d",& m);
printf("\n%d-%d",d,m);

if ((d>=21 || d<=19) && (m==3 || m==4))
printf("\nYour star is ARIES");

else if ((d>=20 || d<=20) && (m==4 || m==5))
printf("\nYour star is TAURUS");

else if ((d>=21 || d<=21) && (m==5 || m==6))
printf("\nYour star is GEMMINI");

else if ((d>=22 || d<=22) && (m==6 || m==7))
printf("\nYour star is CANCER");

else if ((d>=23 || d<=22) && (m==7 || m==8))
printf("\nYour star is LEO");

else if ((d>=23 || d<=22) && (m==8 || m==9))
printf("\nYour star is VIRGO");

else if ((d>=23 || d<=22) && (m==9 || m==10))
printf("\nYour star is LIBRA");

else if ((d>=23 || d<=21) && (m==10 || m==11))
printf("\nYour star is SCORPIO");

else if ((d>=22 || d<=21) && (m==11 || m==12))
printf("\nYour star is SAGITTARIUS");

else if ((d>=22 || d<=19) && (m==12 || m==1))
printf("\nYour star is CAPRICORN");

else if ((d>=20 || d<=18) && (m==1 || m==2))
printf("\nYour star is AQUARIUS");

else if ((d>=19 || d<=20) && (m==2 || m==3))
printf("\nYour star is PISCES");

getch();
}

hey thanks, it worked but is it possible if i dont use || and execute this program completely with &&???

0

What is the problem with using || ? It is a completely valid part of the C language. There might be some obscure way of doing the same comparison without it, but it would be useless to even try it.

theres no problem using || but my assignment is to use && only...

0

I don't think I can be much more blatant.

When you type:
[code=c] int main() { printf("Hello, World\n"); return 0; }

[/code]

It looks like this when you post it:

int main() {
    printf("Hello, World\n");
    return 0;
}

The article that talks about it is at http://www.daniweb.com/forums/thread93280.html

thanks, i think i understood next time i'll try with code tags.

0

Actually, that code tag message was intended as a reply for yabuki

But if you're not posting your code with code tags, feel free to use them :)

0

I thought of a way to write your program without using the '||' operator would be to double the ifs and have 2 sections for each.

if (m == 3 && d >= 21)
    printf("\nYour star is ARIES");
if (m == 4 && d <= 19)
    printf("\nYour star is ARIES");

See no '||' but it will be longer and return the symbol twice.

I just thought of another alternative (I'm full of good ideas today :) ):

if you did something like:

/* Put the month and day together as MMDD in a single int */
int birthmd = m * 100 + d;
if (birthmd >= 321 && birthmd <= 419)
    printf("\nYour star is ARIES");

Even cleaner and still no pesky '||'

0

I thought of a way to write your program without using the '||' operator would be to double the ifs and have 2 sections for each.

if (m == 3 && d >= 21)
    printf("\nYour star is ARIES");
if (m == 4 && d <= 19)
    printf("\nYour star is ARIES");

See no '||' but it will be longer and return the symbol twice.

I just thought of another alternative (I'm full of good ideas today :) ):

if you did something like:

/* Put the month and day together as MMDD in a single int */
int birthmd = m * 100 + d;
if (birthmd >= 321 && birthmd <= 419)
    printf("\nYour star is ARIES");

Even cleaner and still no pesky '||'

hmmmm u r smart i liked it ur first idea is better and simpler, y cudnt i think of it...:D

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.