C程序使用wasd键更改x和y值

时间:2017-11-04 00:00:24

标签: c coordinates

我想用C语言编写简单的程序,允许用户更改x和y坐标的值。 w表示y ++,s表示y--,表示x--,d表示x ++。我已经创建的代码是这样的:

#include <stdio.h>

int main()
{
    int x=0,y=0;
    char choice;

do
{
    printf("Your position x=%i y=%i\n",x,y);
    scanf("%c",&choice);
    if(choice=='w'){y++;}
    else if(choice=='s'){y--;}
    else if(choice=='a'){x--;}
    else if(choice=='d'){x++;}
    else if(choice=='q'){printf("Quit\n");}
    else {printf("Wrong\n");}
}while(choice!='q');

return 0;
}

不幸的是,如果我执行程序,例如调用'w',我会得到输出:

Your position x=0 y=0
w
Your position x=0 y=1
Wrong
Your position x=0 y=1

为什么程序会像这样工作?

3 个答案:

答案 0 :(得分:0)

 #include <stdio.h>

int main()
{
int x=0,y=0;
char choice;
    while(scanf("%c",&choice)&& choice!='q')
    {

        if(choice=='w')
        {
            y++;
            printf("Your position x=%i y=%i\n",x,y);

        }
        else if(choice=='s')
        {
            y--;
            printf("Your position x=%i y=%i\n",x,y);

        }
        else if(choice=='a')
        {
            x--;
            printf("Your position x=%i y=%i\n",x,y);

        }
        else if(choice=='d')
        {
            x++;
            printf("Your position x=%i y=%i\n",x,y);

        }
        else if(choice=='q')
        {
            printf("Quit\n");
            printf("Your position x=%i y=%i\n",x,y);
        }
        else
        {
            printf("Wrong\n");
            printf("Your position x=%i y=%i\n",x,y);

        }
        scanf("%c",&choice);
    }


  return 0;
  }

答案 1 :(得分:0)

正如上面的Keine Lust所建议的那样,为了以这种方式使用scanf()的输出,您必须在%c转换前添加空格以消除换行符。

根据您的选择,您也可以使用switch case代替所有if语句。使用gcc编译任一个会产生完全相同的代码大小,但有些人会认为switch case稍微更具可读性。考虑到以上所有因素,我们将得出以下源代码:

#include <stdio.h>

int main()
{
    int x=0,y=0;
    char choice;

do
{
    printf("Your position x=%i y=%i\n",x,y);
    scanf(" %c",&choice);
    switch (choice) {
      case 'w':
        y++;
        break;
      case 's':
        y--;
        break;
      case 'a':
        x--;
        break;
      case 'd':
        x++;
        break;
      case 'q':
        printf("Quit\n");
        break;
      default:
        printf("Wrong\n");
    }
}while(choice!='q');

return 0;
}

答案 2 :(得分:0)

这句话:

scanf("%c",&choice);

输入stdin中的下一个字符。

最有可能的是,这个字符将是“空格”,就像换行符一样。

建议的修复方法是修改格式字符串以包含前导空格。类似于:

scanf(" %c",&choice);

领先的空间将消耗任何领先的“空白区域”。