简体   繁体   中英

It prints The printf statement twice

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;

}

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

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.

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.

Please try scanf("%c ", &check); . Notice the extra space given after %c which will absorb extra new line character.

使用getchar ,它可以正常工作,您可以在这里尝试

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM