首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

运行时为什么会直接跳过d=getchar();执行上一条语句

2012-12-29 
运行时为什么会直接跳过dgetchar()执行下一条语句?题目描述回文数:即反转后与本身相等的数,请编写一个程

运行时为什么会直接跳过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");
    }

热点排行
Bad Request.