当我进入input a3 c4时,scanf会自动运行while循环2次吗?
厨师为下国际象棋开发了自己的计算机程序。他才刚刚起步。首先,他需要编写一个模块,该模块将接收玩家编写的移动并进行分析。模块将接收一个字符串,它应该首先报告该字符串是否代表棋盘上的正确单元对(我们称之为正确的字符串),然后根据棋盘上的情况报告它是否代表正确的走法。厨师总是在分析骑士的动作时遇到麻烦。因此,首先他需要一个测试程序来判断给定的字符串是否正确,然后判断它是否代表正确的骑士走法(无论棋盘上的情况如何)。棋盘上的单元被表示为两个字符的字符串:第一个字符是从a到h的小写拉丁字母,第二个字符是从1到8的数字。如果该字符串由5个字符组成,则代表棋盘上正确的单元对,其中前两个字符表示国际象棋人物所在的单元,第三个字符是破折号"-“,最后两个字符表示目标单元。输入第一行包含的单个整数T <= 50000,测试用例的个数。接下来是测试用例。每个测试用例的唯一行包含一个非空字符串,该字符串由ASCII代码从32到126的字符组成。字符串的长度不大于10。对于每个测试用例,如果相应的字符串不代表棋盘上的正确单元对,则输出包含单词"Error“的单行。否则,如果这对单元格表示正确的骑士移动,则输出"Yes“,否则输出"No”。示例输入: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;
}我应该怎么做才能让它正常运行。
发布于 2015-07-26 22:28:45
char str[11];
scanf("%s[^\n]",str);没有初始化?应该是
char str[11];
str[0] = 0;
scanf("%s[^\n]",str);发布于 2015-07-26 22:31:39
在您的测试用例中,您希望循环执行4次,并且它做到了。a3 c4输入生成两个错误,因为scanf只读取a3 (因为两者之间没有连字符),其余的保留在缓冲区中供下一个scanf使用。
https://stackoverflow.com/questions/31638042
复制相似问题