许诺一号 发表于 2019-1-29 20:56:43

关于在DEV-C++上跑程序窗口闪退的问题

我在DEV-C++上编辑的,不知为何窗口一直闪退,程序是敲的书上的代码,理论上正确显示为按w、a、s、d后键入回车,“*”移动位置。代码如下
#include<stdio.h>
#include<stdlib.h>

int main(void)
{
        int i, j;
        int x = 5, y = 10;
        char input;
       
        while(1)
        {
                system("cls");                           //清屏函数
                for(i = 0; i < x; i++)                   //输出飞机位置
                        printf("\n");
                for(j = 0; j < y; j++)
                        printf(" ");
                printf("*");                           //输出飞机
                printf("\n");
               
                scanf("%c", &input);                     //根据用户的不同输入来移动
                if(input == 'a')
                        y--;
                if(input == 'd')
                        y++;
                if(input == 's')
                        x--;
                if(input == 'w')
                        x++;
        }
       
        return 0;
}
请教一下这是哪里出了问题。

jackz007 发表于 2019-1-29 22:28:44

本帖最后由 jackz007 于 2019-1-29 23:02 编辑

      楼主的代码在我这里是可以正常编译运行的,不过,我把代码稍作修改,可以直接用数字键盘区的 4 个方向键操纵这架“飞机”,无需每一次都得按下回车键。以下是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

main(void)
{
      int i , x = 5 , y = 10                                                      ;
      char c                                                                        ;
      for(;;) {
                system("cls")                                                         ;   //清屏
                if (x < 0)x = 23                                                    ;
                if (x > 23) x = 0                                                   ;
                if (y < 0)y = 79                                                    ;
                if (y > 79) y = 0                                                   ;
                for(i = 0 ; i < x ; i ++) printf("\n")                              ;   //输出飞机位置
                for(i = 0 ; i < y ; i ++) printf(" ")                                 ;   //输出飞机位置
                printf("*\n")                                                         ;   //输出飞机
                c = getch()                                                         ;
                if (c == 0xffffffe0) {
                        c = getch()                                                   ;
                        if (c == 0x48) x --                                           ;
                        else if (c == 0x50) x ++                                    ;
                        else if (c == 0x4b) y --                                    ;
                        else if (c == 0x4d) y ++                                    ;
                } else {
                        if (c == 13 || c == 27 || c == 'Q' || c == 'q') break         ;
                }
      }
      printf("game over\n")                                                         ;
}


    如果按下 ESC 或 回车 或 ‘Q’ 或 ‘q’ 键都会直接退出程序。

    我这里操作系统是 Windows XP SP3,编译环境是 TDM-GCC32 5.1.0 + msys2

许诺一号 发表于 2019-1-29 23:35:45

是编辑器的原因,改成VC++就可以执行了

许诺一号 发表于 2019-1-29 23:50:49

jackz007 发表于 2019-1-29 22:28
楼主的代码在我这里是可以正常编译运行的,不过,我把代码稍作修改,可以直接用数字键盘区的 4 个方 ...

谢谢,问一下,就是您写代码时那个分号加在一列感觉很清晰,您是直接敲得空格,还是有其他便捷操作

jackz007 发表于 2019-1-29 23:53:51

许诺一号 发表于 2019-1-29 23:50
谢谢,问一下,就是您写代码时那个分号加在一列感觉很清晰,您是直接敲得空格,还是有其他便捷操作

    不好意思,纯粹体力劳动,习惯而已。
页: [1]
查看完整版本: 关于在DEV-C++上跑程序窗口闪退的问题