请大家帮我看一下为什么我要多输入一个

这个是题目
题目内容:

你的程序要读入一系列正整数数据,输入-1表示输入结束,-1本身不是输入的数据。程序输出读到的数据中的奇数和偶数的个数。

输入格式:

一系列正整数,整数的范围是(0,100000)。如果输入-1则表示输入结束。

输出格式:

两个整数,第一个整数表示读入数据中的奇数的个数,第二个整数表示读入数据中的偶数的个数。两个整数之间以空格分隔。

输入样例:
9 3 4 2 5 7 -1
输出样例:
4 2

这个是我的代码

#include<stdio.h>
int main()
{
    int x;
    int t=0;
    int a=0;
    int b=0;
    printf("请输入一组数,以-1作为结束数:\n");
    scanf("%d",&x); 
    if(-2<x&&x<10000)
    {
    while(0<x&&x<10000)
    {       
        t=x%2;
        if(t==1)
            a++;
        else
            b++; 
        scanf("%d ",&x);
}
     if(x==-1)
    printf("奇数%d个,偶数%d个",a,b);
}
else
printf("输入无效");
    return 0;
}

问题
结果就是我要多打一个-1才能结束运行。

谢谢你们的帮助

把输入放到循环语句内部,修改如下:

#include<stdio.h>
int main()
{
    int x;
    int t=0;
    int a=0;
    int b=0;
    printf("请输入一组数,以-1作为结束数:\n");
    do{       
        scanf("%d",&x); 
        if(x == -1)
            break;
        if(x<-2 || x>10000){
            printf("输入无效\n");
            continue;
        }
        t=x%2;
        if(t==1)
            a++;
        else
            b++; 
    }while(0<x&&x<10000);
    printf("奇数%d个,偶数%d个",a,b);
    return 0;
}


你代码逻辑有问题,参考

#include <stdio.h>
int main()
{
    int x;
    int t = 0;
    int a = 0;
    int b = 0;
    printf("请输入一组数,以-1作为结束数:\n");
    while (1)
    {
        scanf("%d", &x);
        if (x == -1)
            break;
        else if (x >= 0 && x <= 10000)
        {
            t = x % 2;
            if (t == 1)
                a++;
            else
                b++;
        }
        else
        {
            printf("输入无效\n");
        }
    }
    printf("奇数%d个,偶数%d个", a, b);
    return 0;
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

19行scanf中的空格删掉

你这是在网站上做题吗