测试用例输出错误

时间:2017-05-12 08:08:35

标签: c

对于下面给出的问题,我得到一个大输入(测试用例)的错误答案如何解决这些类型的错误:

  

给定一个字符串S,找到该数字的总数   数字。

     

输入

     

第一行包含T,即测试用例的数量。第一行   每个testc ase将包含一个整数N,长度为   字符串。每个测试用例的第二行将包含   一个长度为N的字符串S.

     

输出

     

对于每个测试用例,输出总数   出现在字符串中。

     

约束

     
    

0< T< 200

         

0&lt; N <10000

  
     

示例输入

1
26
sadw96aeafae4awdw2wd100awd
     

示例输出

4

代码

#include<stdio.h>
#include<string.h>

void clean_stdin(void)
{
    int c;
    do {
        c = getchar();
    } while (c != '\n' && c != EOF);
}

int main()
{
    char s[10000];
    int i,c=0,t;
    long long int l;
    scanf("%d",&t);
    while(t--)
    {
        clean_stdin();
        //  gets(s);
        scanf("%lld",&l);
        for(i=0;i<l;i++)
        {
            scanf("%c",&s[i]);
        }

        for(i=0;i<l;i++)
        {
            if(isdigit(s[i])&&(isalpha(s[i+1])||s[i+1]=='\0'))
            {
                c++;
            }
        }
        printf("%d\n",c);
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

scanf("%lld", &l);在号码之后不会丢弃换行符,因此第一个scanf("%c", ...)读取的字符是换行符。

因此,如果数字正好是9999,则会读取换行符和9998个字符,忽略第9999个。

修复方法是在%lld之后添加空格:scanf("%lld ", &l);;这将丢弃以下空格。

然后,你必须将这些字符读入缓冲区 - 而只是使用getchar()一次读取字符...