简体   繁体   中英

How to identify the digit 7 between the given number

I want my code to print "YES" if there is digit 7 in the entered number, and otherwise print "NO".

When I use while(T != 0) for test cases, my code prints "YES" for all the numbers - even for number 45. Without while(T != 0) my code runs perfectly.

Where is my mistake?

#include <stdio.h>

int main() {
    int T;
    scanf("%d", &T);

    while (T != 0) {
        int X;
        scanf("%d", &X);
        int flag, result;

        while (X != 0) {
            result = X % 10;

            if (result == 7) {
                flag = 1;
            }

            X = X / 10;
        }

        if (flag == 1) {
            puts("YES");
        } else {
            puts("NO");
        }

        T--;
    }

    return 0;
}

After trying out your code, the main issue was not with the "while" test. Rather, in the code your test flag was not being reset so once the a value was found to have the digit "7" in it, all subsequent tests were noted as being "YES". With that, following is a refactored version of your code.

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int T;
    printf("How many numbers to test: ");           /* Clarifies what the user is being asked for */
    scanf("%d", &T);

    while (T != 0)
    {
        int X;
        printf("Enter a number to be tested: ");    /* Again, lets the user know what to enter */
        scanf("%d", &X);
        int flag = 0, result;

        while (X != 0)
        {
            result = X % 10;

            if (result == 7)
            {
                flag = 1;
            }

            X = X / 10;
        }

        if (flag == 1)
        {
            puts("YES");
        }
        else
        {
            puts("NO");
        }
        flag = 0;   /* Needs to be reset after being set and before next check */

        T--;
    }

    return 0;
}

Some things to note.

  • Although not really needed, verbiage was added as prompts to clarify to the user what needed to be entered for values.
  • Most importantly, the flag variable gets initialized to zero and then subsequently gets reset to zero after each test has been completed.

With those bits addressed, following is some sample terminal output.

@Vera:~/C_Programs/Console/Seven/bin/Release$ ./Seven 
How many numbers to test: 4
Enter a number to be tested: 3987
YES
Enter a number to be tested: 893445
NO
Enter a number to be tested: 8445
NO
Enter a number to be tested: 58047
YES

Give that a try and see if it meets the spirit of your project.

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