该程序未提供正确的输出;它只是输入一次而不是输入'在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
答案 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)
问题是第二个scanf
(scanf("%d", &len);
)在标准输入流(stdin
)中留下换行符。然后,在循环的第一次迭代中,第三个scanf
(scanf("%c",&ar[J]);
)将使用此字符。
更改
scanf("%d", &len);
到
scanf("%d%*c", &len);
将解决问题。 %*c
告诉scanf
阅读并弃掉某个角色。