数组查找元素为什么代码运行对的,答案错

输入10个数存入数组a中,再输入一个数x,查找所有与x相同的数组元素(有可能存在多个与x相同的值),输出所有与x相同元素的下标值同时输出与x相同元素的个数,若没找到,则输出No。

输入格式:
输入数据有两行,第一行输入10个整数,以空格间隔,第二行要查找的数x

输出格式:
若找到,输出数据有两行,第一行输出下标值(每个输出的下标值后有一个空格),第二行输出相同元素的个数,若找不到输出No。

输入样例:
-1 5 5 -2 4 -3 0 9 20 10
5
输出样例:
1 2
2
(注意,第一行最后一个数后有一个空格)
(注意,第二行的数后没有空格)
#include<stdio.h>
int main(){
int n,i,j,x,t=0;
int a[10];
for(i=0;i<10;i++){
scanf("%d",&a[i]);
}
scanf("%d",&x);
int flag=0;
for(i=0;i<10;i++){
if(a[i]==x)
{
flag=1;
break;
}
for(i=0;i<10;i++)
if(a[i]==x)
{
printf("%d ",i);
t++;
}
;
if(t==0)
printf("No");
else printf("\n%d",t);
return 0;
}
}
(格式有点奇怪是因为用上一题的代码改的。)
在c语言编译器上运行是对的,(试过题目中的数据和自己随便编的执行no的数据,但是运行结果是对的)但是在pta上却显示部分正确,为什么呢?

输入的for循环不应该和输出的for循环嵌套,flag没用

#include<stdio.h>
int main()
{
    int i,x,t=0;
    int a[10];
    for(i=0; i<10; i++)
    {
        scanf("%d",&a[i]);
    }
    scanf("%d",&x);
//    int flag=0;
//    for(i=0; i<10; i++)
//    {
//        if(a[i]==x)
//        {
//            flag=1;
//            break;
//        }
//    }
    for(i=0; i<10; i++)
        if(a[i]==x)
        {
            printf("%d ",i);
            t++;
        }
    if(t==0)
        printf("No");
    else
        printf("\n%d",t);
    return 0;
}



int main()
{
    int n, i, j, x, t = 0;
    int a[10];
    for (i = 0; i < 10; i++)
    {
        scanf("%d", &a[i]);
    }
    scanf("%d", &x);
    //int flag = 0;
    for (i = 0; i < 10; i++)
    {
        // if (a[i] == x)
        // {
        //     flag = 1;
        //     break;
        // }
        // for (i = 0; i < 10; i++)
        if (a[i] == x)
        {
            printf("%d ", i);
            t++;
        };
    }
    if (t == 0)
        printf("No");
    else
        printf("\n%d", t);
    return 0;
}

这段代码里flag没有用上吧,而且for循环怎么不嵌套