Reputation: 157
This is really strange it prints this line printf("Do you want to continue Yes (Y) or No (N): \n");
Not using any loop nothing but still it prints that statement twice
int main()
{
int led=0;
int ohm=0;
char check;
int flag=0;
while (led < 1 || led > 3){
printf("Enter the number of switch you want to close: \n\n");
printf(" ******************** Press 1 for switch (LED) 1 ********************\n");
printf(" ******************** Press 2 for switch (LED) 2 ********************\n");
printf(" ******************** Press 3 for switch (LED) 3 ********************\n");
printf("Switch: ");
scanf("%d", &led);
}
printf("\n\n");
while (ohm < 1 || ohm > 3){
printf("Enter the resistance of Rheostat: \n\n");
printf(" ******************** Press 1 for 10 ohm resistance ********************\n");
printf(" ******************** Press 2 for 20 ohm resistance ********************\n");
printf(" ******************** Press 3 for 30 ohm resistance ********************\n");
printf("Resistance: ");
scanf("%d", &ohm);
}
while (flag == 0)
{
//LED-1
if(led== 1 && ohm== 1 )
{
printf("LED-1 is blinking 2 times\n");
}
if(led== 1 && ohm== 2)
{
printf("LED-1 is blinking 4 times\n");
}
if(led== 1 && ohm== 3 )
{
printf("LED-1 is blinking 6 times\n");
}
//LED-2
if(led== 2 && ohm== 1 )
{
printf("LED-2 is blinking 2 times\n");
}
if(led== 2 && ohm== 2 )
{
printf("LED-2 is blinking 4 times\n");
}
if(led == 2 && ohm == 3)
{
printf("LED-2 is blinking 6 times\n");
}
//LED-3
if(led == 3 && ohm == 1 )
{
printf("LED-3 is blinking 2 times\n");
}
if(led == 3 && ohm == 2)
{
printf("LED-3 is blinking 4 times\n");
}
if(led == 3 && ohm == 3)
{
printf("LED-3 is blinking 6 times\n");
}
led = 0;
ohm = 0;
printf("Do you want to continue Yes (Y) or No (N): \n");
scanf("%c", &check);
if(check =='Y' || check =='y')
{
while (led < 1 || led > 3){
printf("Enter the number of switch you want to close on: ");
scanf("%d", &led);
}
while (ohm < 1 || ohm > 3){
printf("Enter the resistance of Rheostat: ");
scanf("%d", &ohm);
}
}
if(check=='N' || check=='n')
{
printf("Thanks for using the program");
flag = 1;
}
}
return 0;
}
Upvotes: 1
Views: 16435
Reputation: 20256
The first time scanf("%c", &check);
finds some garbage (that does not match y
or n
) so your program can do another loop.
As someone else already noticed, that garbage might be the newline after the ohm input.
Some ideas to solve the problem:
http://www.velocityreviews.com/forums/t436518-get-rid-of-trailing-newline-for-scanf.html
scanf(" %c", &input);
(leading space will eat whitespace in the input)
scanf() leaves the new line char in the buffer
Upvotes: 3
Reputation: 46
Use scanf(" %d", &led); , scanf(" %c", &check); etc. in the code. Adding an extra space before the format specifier will solve the problems caused by garbage/newline in the buffer.
Upvotes: 3
Reputation: 6606
Please try scanf("%c ", &check);
. Notice the extra space given after %c
which will absorb extra new line character.
Upvotes: 0
Reputation: 122373
scanf("%d", &ohm);
Here when you input a number and press ENTER, the number is processed by scanf
, but the newline is still in the input buffer, then later
printf("Do you want to continue Yes (Y) or No (N): \n");
scanf("%c", &check);
check
will actually store the newline, not 'N'
,
if(check=='N' || check=='n')
{
printf("Thanks for using the program");
flag = 1;
}
so flag
will not be set to 1
, the while
loop will continue again. In the second loop, check
can be assigned 'N'
, the loop will terminate after.
Upvotes: 0