scanf make while循环自动运行2次

时间:2015-07-26 14:23:14

标签: c while-loop scanf

当我输入输入时,

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;
}

我该怎么做才能让它正常运行。

2 个答案:

答案 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(因为两者之间没有连字符),其余的仍保留在缓冲区中以供下一次扫描。