输入的第一个数不管是不是素数都会print yes,输入0的时候,本来应该终止运行,没有终止


 #include<stdio.h>
void f()
{
    int n=2,v=1,x;
    for(;n<x;n++)
    {
        if(x%n==0)
        {
            v=0;
            break;
        }
    }
    if(v==0)
    printf("no\n");
    else
    printf("yes\n");
    scanf("%d",&x);
}
int main()
{
    int x;
    scanf("%d",&x);
    do{
        f(x);
    } while(x!=0);
    return 0;
}

代码的意思是,输入一个数判断是否为素数
问题是,输入的第一个数不管是不是素数都会print yes,输入0的时候,本来应该终止运行,没有终止。
这是把原来的代码拆成两个函数了(要求),原来的代码没有问题
原来的代码:



#include<stdio.h>
int main()
{
    int x,n,v;
    scanf("%d",&x);
    do{
        n=2,v=1;
        for(;n<x;n++)
        {
            if(x%n==0)
            {
                v=0;
                break;
            }
        }
        if(v==0)
        printf("no\n");
        else
        printf("yes\n");
        scanf("%d",&x);
    } while(x);
    return 0;
}

要求:连续输入多个整数判断是否素数,以0结束。
这是我们之前做过的题目,现要求将其中判断一个数是否素数的处理编写为一个独立的模块,在main函数中调用使用它。

修改如下:


#include<stdio.h>
void f(int x)
{
    int n = 2, v = 1;
    for (; n < x; n++)
    {
        if (x % n == 0)
        {
            v = 0;
            break;
        }
    }
    if (v == 0)
        printf("no\n");
    else
        printf("yes\n");
}
int main()
{
    int x;
    while (scanf_s("%d", &x) && x != 0)
        f(x);
    return 0;
}

感谢您的回答,可以问一下(scanf_s("%d", &x) && x != 0)的含义以及scanf_s的作用和使用情境吗