c 언어 판단 소수 프로그램 코드

4925 단어
 
  
#include

bool isPrimeNum(int x)
{
    if (x == 1)
        return false;
    else if (x <= 0)
        return false;
    else if (x == 2)
        return true;
    else
    {
        for (int i = 2; i < x; i++)
        {
            if (x%i == 0)
                return false;
        }
        return true;

    }
}

int main(void)
{
    int x;
    char ch;
    do{
    printf(" 1 :
");
    scanf("%d", &x);
    if (isPrimeNum(x) == false)
        printf("%d
",x);
    else if (isPrimeNum(x) == true)
        printf("%d
",x);
    printf(" (y/n):
");
    scanf("%c", &ch);
    }while ('y'== ch || 'Y' == ch);
    return 0;
}


그런데 운행할 때 문제가 생겼어요.
도라고 썼는데...while는 일을 절약하기 위해 반복적으로 판단한다.하지만 효과가 없다.
나중에 수정:
 
  
#include

bool isPrimeNum(int x)
{
    if (x == 1)
        return false;
    else if (x <= 0)
        return false;
    else if (x == 2)
        return true;
    else
    {
        for (int i = 2; i < x; i++)
        {
            if (x%i == 0)
                return false;
        }
        return true;

    }
}

int main(void)
{
    int x;
    char ch;
    do{
    printf(" 1 :
");
    scanf("%d", &x);
    if (isPrimeNum(x) == false)
        printf("%d
",x);
    else if (isPrimeNum(x) == true)
        printf("%d
",x);
    printf(" (y/n):
");
    scanf(" %c", &ch);//
    }while ('y'==ch || 'Y' == ch);
    return 0;
}


이렇게 해서 문제가 신기하게 해결되었다.
그리고 나중에, 다시 이렇게 고친다.
 
  
#include

bool isPrimeNum(int x)
{
    if (x == 1)
        return false;
    else if (x <= 0)
        return false;
    else if (x == 2)
        return true;
    else
    {
        for (int i = 2; i < x; i++)
        {
            if (x%i == 0)
                return false;
        }
        return true;

    }
}

int main(void)
{
    int x;
    char ch;
    do{
    printf(" 1 :
");
    scanf("%d", &x);
    if (isPrimeNum(x) == false)
        printf("%d
",x);
    else if (isPrimeNum(x) == true)
        printf("%d
",x);
    printf(" (y/n):
");
    scanf("
%c", &ch);// '
'
    }while ('y'==ch || 'Y' == ch);
    return 0;
}


문제 없어요.
그래서 총괄적으로 말하면 문제는 우리가 숫자를 입력하고 리턴을 누르는 것처럼'입력 흐름에 저장되어 있는 것 같다'는 것이다.
따라서 첫 번째 코드를 보십시오.
 
  
int main(void)
{
    int x;
    char ch;
    do{
    printf(" 1 :
");
    scanf("%d", &x);
    if (isPrimeNum(x) == false)
        printf("%d
",x);
    else if (isPrimeNum(x) == true)
        printf("%d
",x);
    printf(" (y/n):
");
    scanf("%c", &ch);  // '
'     ch = '
';
    }while ('y'==ch || 'Y' == ch);  // 'y' != '
'  && 'Y' != '
';
    return 0;   // return
}

또한 fflush(stdin)를 사용하여 입력 캐시를 비울 수도 있습니다.
 
  
#include

bool isPrimeNum(int x)
{
    if (x == 1)
        return false;
    else if (x <= 0)
        return false;
    else if (x == 2)
        return true;
    else
    {
        for (int i = 2; i < x; i++)
        {
            if (x%i == 0)
                return false;
        }
        return true;

    }
}

int main(void)
{
    int x;
    char ch;
    do{
    printf(" 1 :
");
    scanf("%d", &x);
    if (isPrimeNum(x) == false)
        printf("%d
",x);
    else if (isPrimeNum(x) == true)
        printf("%d
",x);
    printf(" (y/n):
");
    fflush(stdin);  //
    scanf("%c", &ch);
    }while ('y'==ch || 'Y' == ch);
    return 0;
}

좋은 웹페이지 즐겨찾기