新手求助:统计满足条件的4位数

题目:统计满足条件的4位数

【题目描述】
给定若干个四位数,求出其中满足以下条件的数的个数:个位数上的数字减去千位数上的数字,再减去百位数上的数字,再减去十位数上的数字的结果大于零。

【输入】
输入为两行,第一行为四位数的个数n,第二行为n个的四位数。(n≤100)

【输出】
输出为一行,包含一个整数,表示满足条件的四位数的个数。

【输入样例】
5
1234 1349 6119 2123 5017
【输出样例】
3

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{char a,b,c,d;
int n,y=0;
cin>>n;
for(int i=1;i<=n;i++)
{scanf("%c%c%c%c",&a,&b,&c,&d);
if((d-a-b-c)>0)
y++;
}
cout<<y<<endl;
    return 0;
}

请问哪里出错了?运行时答案错误

因为字符有ASCII码的原因,字符的实际数值是原数字加上48。
修改方法:1. 把a,b,c,d设成int型;2. 把d-a-b-c变成(d-48)-(a-48)-(b-48)-(c-48)。

还有就是u013434984说的,把cin和scanf统一。

#include<iostream>
#include<cstdio>
using namespace std;
int main(){ 
    int num[50],count=0,i,n;
    int a,b,c,d;
    printf("请输入四位数个数");
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&num[i]);
        if((num[i]%10-num[i]/1000-num[i]/100%10-num[i]/10%10)>0){
            count++;
        }

    }
    printf("%d",count);

    return 0;
}

不要混合使用cin和scanf
你这样,n是5,但是scanf会从换行开始读起,所以你的输入数为
图片说明
最终结果为0也就不奇怪了。
既然用cpp最好就统一用cin >> a >> b >> c >> d;