为什么这个程序产生了错误的答案?

时间:2015-10-04 10:56:31

标签: c arrays character

该程序未提供正确的输出;它只是输入一次而不是输入'在for-loop中第一次进入的时候。

这个问题是HEADBOB(https://www.codechef.com/problems/HEADBOB

#include <stdio.h>
int main()
{
    int t;
    scanf("%d", &t);
    for(t; t>0; t--)
    {
        int J=0, Y=0, N=0, I=0, len=0;
        if(len==0)
        scanf("%d", &len);
        char ar[len];
        for(J=0; J<len; J++)
        {
            scanf("%c",&ar[J]);
            if(ar[J]=='Y')
                Y++;
            else if(ar[J]=='N')
                N++;
            else if(ar[J]=='I')
                I++;
        }
        if(I>0)
            printf("INDIAN\n");
        else
        {
            if((Y&&!N)||(N&&!Y))
                printf("NOT SURE\n");
            else if(Y&&N) printf("NOT INDIAN\n");
        }
    }
}

INPUT:

测试案例数量

字符数

N个字符数

示例输入&amp;上面代码的输出:

INPUT:

5

5

NNYNN

输出:

NOT INDIAN

2 个答案:

答案 0 :(得分:1)

检查scanf("%c", &ar[j])是否正在读取空格字符!想想

scanf(" %c", &ar[j]);

这意味着跳过所有空格字符(空格,制表符,\n等)。 甚至更好:

scanf("%d", &len);
char ar[len + 1]; // + 1 for 0-termination
scanf(" %s", ar); // skip all whitespace characters, then read a string

一次性读取完整字符串要快得多。

答案 1 :(得分:0)

问题是第二个scanfscanf("%d", &len);)在标准输入流(stdin)中留下换行符。然后,在循环的第一次迭代中,第三个scanfscanf("%c",&ar[J]);)将使用此字符。

更改

scanf("%d", &len);

scanf("%d%*c", &len);

将解决问题。 %*c告诉scanf阅读并弃掉某个角色。

相关问题