c语言90分,下了错了的输入输出的测试数据,答案一样,求大神求解

P1055 [NOIP2008 普及组] ISBN 号码

liuqishijian @ 2022-01-20 15:06:40

#include <stdio.h>
int main()
{
    char a[14],c;
    gets(a);
    int b=0,j=1;
    for(int i=0;i<12;i++)
    {
        if(a[i]!='-')
            b+=(a[i]-'0')*j++;
    }
    if(b%11==10)
        c='X';
    else
        c=b%11+'0';
    if(c==a[12])
        printf("Right");
    else{
        a[12]=c;
        puts(a);
    }
    return 0;

by coldy_rainy @ 2022-01-20 15:21:50

@liuqishijian

不能用gets!!!


by coldy_rainy @ 2022-01-20 15:23:46

@liuqishijian

这样:

#include <stdio.h>
int main()
{
    char a[14],c;
    fgets(a,sizeof(a),stdin);
    int b=0,j=1;
    for(int i=0;i<12;i++)
    {
        if(a[i]!='-')
            b+=(a[i]-'0')*j++;
    }
    if(b%11==10)
        c='X';
    else
        c=b%11+'0';
    if(c==a[12])
        printf("Right");
    else{
        a[12]=c;
        puts(a);
    }
    return 0;
}

把get(a);改成fgets(a,sizeof(a),stdin);

效果一样,但不会炸


by liuqishijian @ 2022-01-20 15:26:36

牛啊


by coldy_rainy @ 2022-01-20 15:26:53

@liuqishijian

全绿

洛谷是在linux系统下工作的,而linux系统用gets会炸,因此会错

您调试的场所是windows系统,因此在您的电脑下会正确✔


by liuqishijian @ 2022-01-20 15:32:11

@penhaochen 难怪如此,刚才我试了一下scanf也能成功。


|