【发布时间】:2015-07-26 14:23:14
【问题描述】:
当我输入输入时,scanf 会自动运行 while 循环 2 次 a3 c4?
Chef 开发了自己的下棋计算机程序。他在最开始。首先,他需要编写一个模块来接收玩家编写的动作并对其进行分析。模块会收到一个字符串,它首先应该报告这个字符串是否代表棋盘上正确的一对单元格(我们称这样的字符串是正确的),然后根据棋盘上的情况报告它是否代表正确的移动。厨师总是难以分析骑士的动作。因此,首先他需要一个测试程序,可以判断给定的字符串是否正确,然后判断它是否代表正确的马移动(无论棋盘上的情况如何)。棋盘上的单元格表示为由两个字符组成的字符串:第一个字符是从 a 到 h 的小写拉丁字母,第二个字符是从 1 到 8 的数字。字符串表示棋盘上正确的一对单元格,如果它由 5 个字符组成,其中前两个字符代表国际象棋图所在的单元格,第三个字符是破折号“-”,最后两个字符代表目标单元格。 输入 第一行包含一个整数 T
输出: 是的 不 错误 错误
#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;
}
我该怎么做才能让它正常运行。
【问题讨论】:
-
%s[^\n]应该是%10[^\n],并且在这样做之前您还需要清除输入缓冲区。 -
为什么要测试
length>5 || length<5而不是length != 5,为什么要硬编码 ASCII 字符?你可以做else if(str[0] < 'a')。
标签: c while-loop scanf