运行时为什么会直接跳过d=getchar();执行下一条语句?
题目描述
回文数:即反转后与本身相等的数,请编写一个程序求出区间内的回文数
PS:注意是开区间还是闭区间
输入
第一行为一个整数N,表示下面有N组测试数据
每组测试数据格式为[a,b]{a<=x<=b}或者(a,b){a<x<b}
输出
对于每组测试数据,输出该区间内有多少回文数
样例输入
2
[111,111]
(111,111)
样例输出
1
0
这道题我完全没有思路,不会输入[111,111]
(111,111)
在同学的指导下勉强写了一下,可是完全不对,运行时不知道为什么直接跳过了d=getchar();以下是我写的程序,大家帮忙看看,提点意见或者思路吧,谢谢!
#include<stdio.h>
#include<string.h>
int main()
{
int a,b,g,i=0,sum=0,p,sune=0,s=0;//a和b是例子里的111和111,sum是用来记录比较了多少数组sum[]中的元素,sune是用来记录回文数个数的,s是用来控制输入的组数的//
char d,k,min[500]={1,2};
scanf("%d",&g);//输入组数//
for(s=0;s<g;s++)
{
d=getchar();//输入“[”或者“(” 的//
scanf("%d,%d",&a,&b);
k=getchar();//输入“[”或者“(” 的,与上面的对应//
p=a;
if(d=='[')//判断是闭区间还是开区间//
{
while(a<=b)
{
while(p>0)
{
min[i]=p%10;
p=p/10;
i++;
}//将整数a分解后依次存入数组min中//
for(i=0;i<strlen(min);i++)
{
if(min[i]==min[strlen(min)-i])
sum++;
if(2*sum>=strlen(min))
sune++;
}//判断是否为回文数//
a++;
}
printf("%d",sune);
}
if(d=='(')
{
p++;
while(a<b)
{
while(a>0)
{
min[i]=p%10;
p=p/10;
i++;
}//将整数a分解后依次存入数组min中//
for(i=0;i<strlen(min);i++)
{
if(min[i]==min[strlen(min)-i])
sum++;
if(2*sum>=strlen(min))
sune++;
}//判断是否为回文数//
a++;
}
printf("%d",sune);
}
}
return 0;
}
[解决办法]
scanf("%d",&g);//输入组数
getchar();//在这调用一下getchar(),因为你上次输入的时候也会把回车放入缓存中,要把缓存中的回车清除掉
char s[40];
int a,b,c;
fgets(s,40,stdin);
if (3==sscanf("(%d,%d)%c",&a,&b,&c)) {
if ('\n'==c && a<=b) {
//(a,b)处理
} else {
printf("format error!\n");
}
} else if (3==sscanf("[%d,%d]%c",&a,&b,&c)) {
if ('\n'==c && a<=b) {
//[a,b]处理
} else {
printf("format error!\n");
}
} else {
printf("format error!\n");
}