scanf会自动运行while循环2次 a3 c4?
Chef开发了自己的下棋计算机程序。他刚开始。首先,他需要编写将接收玩家编写的动作并进行分析的模块。该模块将接收一个字符串,它应首先报告该字符串是否代表棋盘上正确的单元格对(我们称这些字符串正确),然后根据棋盘上的情况报告它是否代表正确的移动。厨师总是在分析骑士动作方面遇到麻烦。因此,首先他需要一个测试程序,可以说出一个给定的字符串是否正确,然后它是否代表一个正确的骑士移动(无论棋盘上的情况如何)。棋盘上的单元格表示为两个字符的字符串:第一个字符是从a到h的小写拉丁字母,第二个字符是从1到8的数字。字符串表示棋盘上正确的单元格对它由5个字符组成,前两个字符代表国际象棋图形的单元格,第3个字符是短划线“ - ”,后两个字符代表目标单元格。 输入 第一行包含单个整数T <= 50000,即测试用例的数量。 T测试案例如下。每个测试用例的唯一一行包含一个非空字符串,该字符串由ASCII代码组成,字符数为32到126.字符串的长度不大于10。 产量 对于每个测试用例,如果相应的字符串不代表棋盘上正确的单元格对,则输出包含单词“Error”的单行。如果这对单元格表示正确的骑士移动,则输出“是”,否则输出“否”。 例 输入: 4 A1-B3 D2-H8 a3 c4 ErrorError
输出: 是 没有 错误 错误
#include<stdio.h>
#include<string.h>
int main()
{
int test;
scanf("%d",&test);
while(test--)
{
char str[11];
scanf("%s[^\n]",str);
int length=strlen(str);
if(length>5 || length<5)
{
printf("Error\n");
}
else if(str[0]<97 || str[0]>104 || str[1]<49 || str[1]>57 || str[2]!=45 || str[3]<97 || str[3]>104 || str[4]<48 || str[4]>57)
{
printf("Error\n");
}
else
{
if(abs(str[0]-str[3])==1 && abs(str[1]-str[4])==2 || abs(str[0]-str[3])==2 ||abs(str[1]-str[4])==1)
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
}
return 0;
}
我该怎么做才能让它正常运行。
答案 0 :(得分:0)
char str[11];
scanf("%s[^\n]",str);
没有初始化?应该是
char str[11];
str[0] = 0;
scanf("%s[^\n]",str);
答案 1 :(得分:0)
在您的测试用例中,您希望循环执行4次,并且它会这样做。 a3 c4
输入生成两个错误,因为scanf
只读取a3
(因为两者之间没有连字符),其余的仍保留在缓冲区中以供下一次扫描。